home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Very Best of Atari Inside
/
The Very Best of Atari Inside 1.iso
/
sharew
/
chemie
/
sysiph12
/
esr
/
sysiph12.lst
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS
UTF-8
Wrap
File List
|
1990-04-10
|
105.0 KB
|
4,688 lines
HIDEM
OPTION BASE 0
GOSUB datenordner
CLR bitmuster$
FOR i=1 TO 37
READ zeilenmuster
bitmuster$=bitmuster$+MKI$(zeilenmuster)
NEXT i
DEFMOUSE bitmuster$
DATA 7,7,1,0,1
' MASKENMUSTER
DATA &X0000001000000000
DATA &X0000011100000000
DATA &X0000111110000000
DATA &X0000111110000000
DATA &X0001111111000000
DATA &X0001111111000000
DATA &X0011111111000000
DATA &X1111101111000111
DATA &X1111001111011111
DATA &X0000001111111100
DATA &X0000001111111000
DATA &X0000001111111000
DATA &X0000000111110000
DATA &X0000000111110000
DATA &X0000000011100000
DATA &X0000000001000000
' CURSOR MUSTER
' 1234567890123456
DATA &X0000000000000000
DATA &X0000001000000000
DATA &X0000011100000000
DATA &X0000011100000000
DATA &X0000110110000000
DATA &X0000110110000000
DATA &X0001100110000000
DATA &X0111000110000110
DATA &X0110000110001110
DATA &X0000000110011000
DATA &X0000000110110000
DATA &X0000000110110000
DATA &X0000000011100000
DATA &X0000000011100000
DATA &X0000000001000000
DATA &X0000000000000000
esrordner:
CHDIR "\ESR"
IF EXIST("SYSIPHUS.PIC")
bild_da!=TRUE
OPEN "I",#1,"SYSIPHUS.PIC"
BLOAD "SYSIPHUS.PIC",XBIOS(2)
CLOSE #1
ELSE
ALERT 1," | WER HAT DENN DA | SCHON WIEDER KOPIERT ? ",1,"DAS WARS | WEITER",looser%
IF looser%=1
END
ELSE
CHDIR "\"
IF EXIST("SYSIPHUS.PIC")
NAME "SYSIPHUS.PIC" AS "\ESR\SYSIPHUS.PIC"
bild_da!=TRUE
GOTO esrordner
ENDIF
ENDIF
ENDIF
IF bild_da!=TRUE
DO
IF MOUSEK>0
maus=1
ENDIF
IF INKEY$>""
maus=1
ENDIF
EXIT IF maus=1
LOOP
ENDIF
'
' **********************************************************************
' ****************** SYSIPHUS 1.2 ***********************
' ****************** ESR-SIMULATIONSPROGRAMM ***********************
' ****************** MIT VIEL MÜHE GESCHRIEBEN ***********************
' ****************** VON Dr. GREGOR KRAFT ***********************
' ****************** ANNO DOMINI 1989 ***********************
' **********************************************************************
SHOWM
ON BREAK GOSUB ende
'
CHDIR "\DATEN\"
'
OPENW 0 ! Pull down - Menue erstellen
DIM eintrag$(55)
DO
READ eintrag$(i%)
EXIT IF eintrag$(i%)="****"
INC i%
LOOP
'
DATA SYSIPHUS, INFO,------------------------,1,2,3,4,5,6,""
DATA DATEI,LADEN,SPEICHERN,LOESCHEN,""
DATA PARAMETER,ATOMGRUPPEN,KERNPARAMETER,SPEKTRUMPARAMETER,""
DATA SPEKTRUM,SIMULATION,STICKLINE,HÜLLKURVE,""
DATA OPTIONEN,FILENAME,ANDERE SWEEPWIDTH,AUSSCHNITT,STUPID,FORMATIEREN,VERGRÖßERN,g-WERT,""
DATA BILDER,SCREENCOPY,HARDCOPY,PLOTTER,SIGNUM,""
DATA ARBEIT,ANSCHAUEN,AUFSCHREIBEN,SPEKBEREICH,VERGLEICH,DIFFERENZ,""
DATA INPUT,ESP300,MESS-SPEKTREN,""
DATA ENDE,QUIT,"",""
DATA ****
MENU eintrag$()
'
auf=1024
'
ON MENU KEY GOSUB tasten
ON MENU GOSUB auswahl
'
MENU 11,3
MENU 12,3
MENU 17,2
MENU 21,2
MENU 22,2
MENU 23,2
MENU 27,2
MENU 28,2
MENU 30,3
MENU 31,2
MENU 36,2
MENU 37,2
MENU 35,2
MENU 38,2
MENU 41,2
MENU 42,2
MENU 43,2
MENU 44,2
MENU 45,2
'
'
neustart:
rettung!=0
ON ERROR GOSUB fehlerbehandlung
'
DO
ON MENU
'
GOSUB maus_abschalten
GOSUB maus_einschalten
LOOP
'
'
PROCEDURE auswahl ! Auswahl der Menues
DEFMOUSE bitmuster$
'
DEFFILL 0
PBOX 0,0,640,400
IF INSTR(eintrag$(MENU(0)),"INFO")
GOSUB information
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"ATOMGRUPPEN")
GOSUB atom
ENDIF
' '
'
IF INSTR(eintrag$(MENU(0)),"KERNPARAMETER")
GOSUB eingabe
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"SPEKTRUMPARAMETER")
GOSUB spektrenparameter
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"SIMULATION")
GOSUB hyper
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"STICKLINE")
GOSUB bild
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"ANDERE SWEEPWIDTH")
GOSUB messbereich
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"HÜLLKURVE")
GOSUB linienform
ENDIF
'
IF INSTR(eintrag$(MENU(o)),"QUIT")
GOSUB ende
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"LADEN")
GOSUB lese
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"SPEICHERN")
GOSUB schreibe
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"LOESCHEN")
GOSUB loesche
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"FILENAME")
GOSUB namensgebung
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"AUSSCHNITT")
GOSUB bereich
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"STUPID")
GOSUB robot
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"FORMATIEREN")
GOSUB format
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"HARDCOPY")
GOSUB hardcopy
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"VERGRÖßERN")
GOSUB aufblasen
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"PLOTTER")
GOSUB hp7475a
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"g-WERT")
GOSUB gwert
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"SCREENCOPY")
GOSUB pixel
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"SIGNUM")
GOSUB sichnum
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"ANSCHAUEN")
GOSUB espspektrum
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"AUFSCHREIBEN")
GOSUB messchreiben
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"SPEKBEREICH")
GOSUB spekmessbereich
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"VERGLEICH")
GOSUB simmess
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"DIFFERENZ")
GOSUB differenz
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"ESP300")
GOSUB esp300
ENDIF
'
IF INSTR(eintrag$(MENU(0)),"MESS-SPEKTREN")
GOSUB messlese
ENDIF
'
'
MENU OFF
RETURN
'
'
PROCEDURE maus_abschalten
DPOKE GINTIN,3
GEMSYS 107
maus_ist_aus!=TRUE
RETURN
'
PROCEDURE maus_einschalten
DPOKE GINTIN,2
GEMSYS 107
maus_ist_aus!=FALSE
RETURN
'
PROCEDURE ende
IF maus_ist_aus!=TRUE
GOSUB maus_einschalten
ENDIF
ALERT 2," | PROGRAMM WIRKLICH | BEENDEN ? ",1," S'LANGT | OH GOTT!",anfra%
IF anfra%=2
GOTO heschel
ENDIF
MENU KILL
END
heschel:
RETURN
'
PROCEDURE information
MENU OFF
LOCAL maus%
BOX 100,50,540,350
BOX 105,55,535,345
DEFTEXT 1,17,0,16
TEXT 150,80,340,"PROVINZ-SOFT PRESENT"
DEFTEXT 1,11,0,24
TEXT 180,120,280,"SYSIPHUS 1.2"
DEFTEXT 1,0,0,13
TEXT 150,160,340," EIN BRAUCHBARES ESR-SIMULATIONSPROGRAMM "
TEXT 150,180,340," FÜR EINEN BRAUCHBAREN COMPUTER "
TEXT 150,200,340," GESCHRIEBEN IN GFA-BASIC "
DEFTEXT 1,16,0,13
TEXT 150,220,340," ANNO DOMINI 1989 "
DEFTEXT 1,0,0,13
TEXT 150,240,340," VON DR.GREGOR KRAFT; JAHNSTR.2,6701 MAXDORF "
TEXT 150,260,340,"DIESES PROGRAMM IST FREEWARE UND DARF FREI"
TEXT 150,280,340,"KOPIERT WERDEN ! MÖGE ES VON NUTZEN SEIN !"
BOX 250,290,390,320
TEXT 270,310,100," SO ISSES "
DO
IF MOUSEX>250 AND MOUSEX<390 AND MOUSEY>290 AND MOUSEY<320 AND MOUSEK=1
maus%=1
ENDIF
IF INKEY$=CHR$(13)
maus%=1
ENDIF
EXIT IF maus%=1
LOOP
CLS
' ********************************************************************
BOX 100,50,540,350
BOX 105,55,535,345
DEFTEXT 1,8,0,13
TEXT 150,80,340,"UNTERSAGT IST DIE GEWERBLICHE NUTZUNG !!"
TEXT 150,120,340," AUSDRÜCKLICH UNTERSAGT IST DIE NUTZUNG "
TEXT 150,140,340,"DES PROGRAMMS DURCH DIE FIRMA BRUKER GMBH"
DEFTEXT 1,0,0,13
TEXT 150,160,340,"VERÄNDERUNGEN AN DIESEM PROGRAMM BEDÜRFEN"
TEXT 150,180,340," MEINER AUSDRÜCKLICHEN GENEHMIGUNG "
TEXT 150,220,340," DIE WEITERGABE DIESES PROGRAMMS IST NUR MIT"
TEXT 150,240,340," DEN DATEIEN SYSIPHUS.TXT UND SYSIPHUS.SDO "
TEXT 150,260,340," GESTATTET (UND AUCH SINNVOLL) "
BOX 250,290,390,320
TEXT 270,310,100," NA KLAR "
maus%=0
DO
IF MOUSEX>250 AND MOUSEX<390 AND MOUSEY>290 AND MOUSEY<320 AND MOUSEK=1
maus%=1
ENDIF
IF INKEY$=CHR$(13)
maus%=1
ENDIF
EXIT IF maus%=1
LOOP
CLS
RETURN
'
'
PROCEDURE messbereich ! Eingabe der Sweep-Width (wenn andere
MENU OFF
LOCAL s,maus%
DEFTEXT 1,0,0,13 ! sweep-width im Prog.-ablauf gewünscht
PRINT AT(20,10);"SWEEP-WIDTH :___________|____________" !wird
PRINT AT(35,10);sweep
BOX 250,300,350,330
PRINT AT(36,20);"OK?"
BOX 250,143,450,160
DO
IF ((250<MOUSEX AND 450>MOUSEX) AND (143<MOUSEY AND 160>MOUSEY) AND MOUSEK=1)
maus%=1
ENDIF
IF ((250<MOUSEX AND 350>MOUSEX) AND (300<MOUSEY AND 350>MOUSEY) AND MOUSEK=1)
maus%=2
ENDIF
EXIT IF maus%<>0
LOOP
IF maus%=1
PRINT AT(47,10);
INPUT s
sweep=ABS(s)
PRINT AT(35,10);sweep
ENDIF
CLS
IF spektrum!=TRUE
GOSUB bild
ELSE
GOSUB zeichnung
ENDIF
RETURN
'
PROCEDURE spektrenparameter ! Eingabe der Auflösung,
MENU OFF
BOX 40,20,600,360 ! der Halbwerstbreite und
DEFFILL 1,1 ! der Sweep-Width
PBOX 250,60,350,90
PBOX 250,300,350,330
LOCAL sw$,halbwert$,sw1,auf1,halbwertsbreite,maus%,button%,bu%,butt%
auf1=auf
sw1=sw
halbwertsbreite=halbwert
GRAPHMODE 2
DEFTEXT 0,0,0,13
TEXT 180,50,250,"AUFLÖSUNG"
TEXT 270,320,60,"OK?"
GRAPHMODE 1
DEFTEXT 1,0,0,13
BOX 60,125,160,155
TEXT 70,145,80,"1024"
BOX 204,125,304,155
TEXT 214,145,80,"2048"
BOX 344,125,444,155
TEXT 355,145,80,"4096"
BOX 490,125,590,155
TEXT 500,145,80,"8192"
PRINT AT(36,5);auf1
BOX 265,207,455,227
BOX 265,237,455,258
PRINT AT(10,13);"SIMULATIONS"
PRINT AT(10,14);"SWEEP-WIDTH IN GAUß :___________|___________"
PRINT AT(10,16);"HALBWERTSBREITE IN GAUß :___________|___________"
PRINT AT(37,14);sw1
PRINT AT(37,16);halbwertsbreite
mehr:
maus%=0
DO
IF ((265<MOUSEX AND 455>MOUSEX) AND (207<MOUSEY AND 227>MOUSEY) AND MOUSEK=1)
maus%=3
ENDIF
IF ((265<MOUSEX AND 455>MOUSEX) AND (237<MOUSEY AND 258>MOUSEY) AND MOUSEK=1)
maus%=4
ENDIF
IF INKEY$=CHR$(13)
maus%=2
ENDIF
IF ((250<MOUSEX AND 350>MOUSEX) AND (300<MOUSEY AND 330>MOUSEY) AND MOUSEK=1)
maus%=2
ENDIF
IF ((60<MOUSEX AND 160>MOUSEX) AND (125<MOUSEY AND 155>MOUSEY) AND MOUSEK=1)
maus%=1
auf=1024
ENDIF
IF ((204<MOUSEX AND 304>MOUSEX) AND (125<MOUSEY AND 155>MOUSEY) AND MOUSEK=1)
maus%=1
auf=2048
ENDIF
IF ((344<MOUSEX AND 444>MOUSEX) AND (125<MOUSEY AND 155>MOUSEY) AND MOUSEK=1)
maus%=1
auf=4096
ENDIF
IF ((490<MOUSEX AND 590>MOUSEX) AND (125<MOUSEY AND 155>MOUSEY) AND MOUSEK=1)
maus%=1
auf=8192
ENDIF
EXIT IF maus%>0
LOOP
IF maus%=1
IF auf1<>auf
IF (simgauss%+simlorentz%+simgauss_lorentz%)>0
ALERT 3," ÄNDERUNG DER AUFLÖSUNG | BEDINGT DAS LÖSCHEN DER | SIMULIERTEN GAUß- UND | LORENTZKURVE ",1," ABBRUCH | WEITER ",button%
IF button%=2
auf1=auf
simgauss%=0
simlorentz%=0
simgauss_lorentz%=0
ERASE huelk%()
MENU 27,2
MENU 28,2
ELSE
auf=auf1
ENDIF
ELSE
auf1=auf
ENDIF
ENDIF
PRINT AT(36,5);auf1
GOTO mehr
ENDIF
IF maus%=3
PRINT AT(48,14);
FORM INPUT 7,sw$
sw=ABS(VAL(sw$))
IF sw1<>sw
IF (simgauss%+simlorentz%+simgauss_lorentz%)>0
ALERT 3," ÄNDERUNG DER SWEEP-WIDTH | BEDINGT DAS LÖSCHEN DER | SIMULIERTEN GAUß- UND | LORENTZKURVE ",1," ABBRUCH | WEITER ",butt%
IF butt%=2
sw1=sw
ERASE huelk%()
simgauss%=0
simlorentz%=0
simgauss_lorentz%=0
MENU 27,2
MENU 28,2
MENU 31,2
MENU 36,2
MENU 37,2
MENU 38,2
MENU 44,2
ELSE
sw=sw1
ENDIF
ELSE
sw1=sw
sweep=sw
ENDIF
ENDIF
PRINT AT(37,14);"_________";
PRINT AT(37,14);sw1;
GOTO mehr
ENDIF
IF maus%=4
PRINT AT(48,16);
FORM INPUT 7,halbwert$
halbwert=ABS(VAL(halbwert$))
IF halbwertsbreite<>halbwert
IF (simgauss%+simlorentz%+simgauss_lorentz%)>0
ALERT 3," ÄNDERUNG DES HALBWERTSBREITE | BEDINGT DAS LÖSCHEN DER | SIMULIERTEN GAUß- UND | LORENTZKURVE ",1," ABBRUCH | WEITER ",bu%
IF bu%=2
halbwertsbreite=halbwert
ERASE huelk%()
simgauss%=0
simlorentz%=0
simgauss_lorentz%=0
MENU 28,2
MENU 27,2
MENU 31,2
MENU 36,2
MENU 37,2
MENU 38,2
MENU 44,2
ELSE
halbwert=halbwertsbreite
ENDIF
ELSE
halbwertsbreite=halbwert
ENDIF
ENDIF
PRINT AT(37,16);"_________";
PRINT AT(37,16);halbwert
GOTO mehr
ENDIF
CLS
RETURN
'
PROCEDURE tasten !Tastenbelegung
LOCAL scancode%
scancode%=SHR(MENU(14),8)
asc%=ASC(t$)
IF scancode%=68
GOSUB ende
ENDIF
IF scancode%=67
GOSUB rausch
ENDIF
IF scancode%=60
GOSUB laufwerk
ENDIF
RETURN
'
'
'
' *************************************************************************
'
PROCEDURE atom !Eingabe der Zahl der Unabhängigen Atomgruppen
MENU OFF
LOCAL maus,nik$,nikaerst%,button%
eingabe:
maus=0
nikaerst%=nika%
BOX 80,200,280,230
BOX 320,200,520,230
DEFTEXT 1,9,0,16
TEXT 85,223,180,"EINGABE OK?"
TEXT 325,223,180,"ÄNDERN?"
DEFTEXT 1,0,0,13
PRINT AT(20,10);"UNABHÄNGIGE ATOMGRUPPEN:_____|___";""
PRINT AT(47,10);nika%
IF nika%=0
GOTO hinein
ENDIF
DO
IF INKEY$=CHR$(13)
maus=1
ENDIF
IF ((85<MOUSEX AND 275>MOUSEX) AND (205<MOUSEY AND 225>MOUSEY)) AND MOUSEK=1
maus=1
ENDIF
IF ((325<MOUSEX AND 515>MOUSEX) AND (205<MOUSEY AND 225>MOUSEY)) AND MOUSEK=1
maus=2
ENDIF
EXIT IF maus>0
LOOP
IF maus=1
GOTO atomende
ENDIF
hinein:
PRINT AT(50,10);
FORM INPUT 2,nik$
PRINT AT(43,10);":__________"
PRINT AT(47,10);nika%
nika%=FIX(ABS(VAL(nik$)))
PRINT AT(47,10);nika%
IF nika%=0
GOTO eingabe
ENDIF
IF nikaerst%>0
IF nikaerst%<>nika%
ALERT 3," ÄNDERN DER ZAHL DER | UNABHÄNGIGEN ATOMGRUPPEN | BEDINGT DAS LÖSCHEN DER | SIMULIERTEN SPEKTREN ",1,"ABBRUCH | WEITER ",button%
IF button%=1
nika%=nikaerst%
GOTO eingabe
ENDIF
ERASE ag1()
ERASE ag()
ERASE at$()
ERASE hy()
ERASE intensi()
ERASE huelk%()
simgauss%=0
simlorentz%=0
simgauss_lorentz%=0
simstick%=0
MENU 21,2
MENU 22,2
MENU 23,2
MENU 27,2
MENU 28,2
MENU 31,2
MENU 36,2
MENU 37,2
MENU 38,2
MENU 44,2
ELSE
GOTO eingabe
ENDIF
ENDIF
nikaerst%=nika%
DIM ag(nika%,2)
DIM at$(nika%,2)
DIM ag1(nika%,2)
GOTO eingabe
atomende:
CLS
MENU 17,3
RETURN
'
' **************************************************************************
'
PROCEDURE eingabe ! Eingabe der Kernparameter; Spin,Anzahl und Kopplungs-
MENU OFF
DEFFILL 1,1 ! konstante
LOCAL k%,maus,but%,butt%,j%
PBOX 25,330,450,360
PBOX 200,100,250,120
GRAPHMODE 2
DEFTEXT 0,1,0,13
TEXT 50,350,350,"ZUM ÄNDERN DER DATEN: RECHTE MAUSTASTE !"
TEXT 205,115,50," OK ? "
GRAPHMODE 1
BOX 25,20,450,360
FOR k%=1 TO nika%
ein:
maus=0
DEFTEXT 1,20,0,10,
TEXT 50,300,400,"Eingabe in Ordnung?"
DEFTEXT 1,0,0,6
BOX 127,307,190,327
TEXT 50,320,380,"weiter mit return! korrektur mit beliebiger Taste"
BOX 70,100,100,120
BOX 350,100,380,120
TEXT 80,112,15,"<="
TEXT 360,112,15,"=>"
DEFTEXT 1,16,0,13
TEXT 100,50,300,"K E R N P A R A M E T E R"
DEFTEXT 1,0,0,13
PRINT AT(10,5);"Atomgruppe ";k%;" von ";nika%;" unabhängigen Atomgruppen"
PRINT AT(10,10);"spin....................:__________"
PRINT AT(36,10);ag(k%,0)
PRINT AT(10,12);"Anzahl der äquivalenten"
PRINT AT(10,13);"Atome dieser Gruppe......:__________"
PRINT AT(36,13);ag(k%,1)
PRINT AT(10,16);"Kopplungskonstante......:__________"
PRINT AT(36,16);ag(k%,2)
'
IF (ag(k%,0)=0 OR ag(k%,1)=0 OR ag(k%,2)=0)
GOTO ein1
ENDIF
'
DO
IF ((127<MOUSEX AND 185>MOUSEX) AND (310<MOUSEY AND 326>MOUSEY) AND MOUSEK=1)
maus=1
ENDIF
IF (INKEY$<>"") OR MOUSEK=2
maus=2
ENDIF
IF ((75<MOUSEX AND 95>MOUSEX) AND (100<MOUSEY AND 120>MOUSEY) AND MOUSEK=1)
maus=3
ENDIF
IF ((355<MOUSEX AND 375>MOUSEX) AND (100<MOUSEY AND 120>MOUSEY) AND MOUSEK=1)
maus=4
ENDIF
IF ((200<MOUSEX AND 250>MOUSEX) AND (100<MOUSEY AND 120>MOUSEY) AND MOUSEK=1)
maus=5
ENDIF
EXIT IF maus<>0
LOOP
IF maus=1
GOTO naexte
ENDIF
'
IF maus=3
k%=k%-2
IF k%<0
k%=nika%-1
ENDIF
GOTO naexte
ENDIF
IF maus=4
IF k%=nika%
k%=0
ENDIF
GOTO naexte
ENDIF
IF maus=5
k%=nika%
GOTO naexte
ENDIF
ein1:
'
MENU 21,3
PRINT AT(35,10);"?"
PRINT AT(36,10);
FORM INPUT 10 AS at$(k%,0)
PRINT AT(35,10);" "
ag1(k%,0)=VAL(at$(k%,0))
PRINT AT(35,13);"?"
PRINT AT(36,13);
FORM INPUT 10 AS at$(k%,1)
PRINT AT(35,13);" "
ag1(k%,1)=FIX(ABS(VAL(at$(k%,1))))
PRINT AT(35,16);"?"
PRINT AT(36,16);
FORM INPUT 10 AS at$(k%,2)
PRINT AT(35,16);" "
ag1(k%,2)=ABS(VAL(at$(k%,2)))
i_np=INP(2)
IF i_np<>13
GOTO ein1
ENDIF
'
' *************************** Abfrage ob die Eingegebenen Daten
IF ag1(k%,0)=0 OR ag1(k%,1)=0 OR ag1(k%,2)=0 ! mit der Programmsyntax
GOTO ein1 ! verträglich sind
ENDIF
'
IF ag1(k%,0)<>1 AND ag1(k%,0)<>0.5
IF FRAC(2*ag1(k%,0))<>0
ALERT 1," DEN ' SPINNERTEN' SPINN | KENNEN MER NET ! ",1," ZURÜCK | WEITER ",butt%
IF butt%<>1
ALERT 3," ORGANIKER ?? ",1," ZURÜCK ",button%
GOTO ein1
ENDIF
GOTO ein1
ENDIF
ENDIF
'
' ***********************************************************************
'
IF ag(k%,0)<>0 OR ag(k%,1)<>0 OR ag(k%,2)<>0
IF ag1(k%,0)<>ag(k%,0) OR ag1(k%,1)<>ag(k%,1) OR ag1(k%,2)<>ag(k%,2)
ALERT 1," ÄNDERN DER PARAMETER | HAT DAS LÖSCHEN DER | SIMULIERTEN SPEKTREN | ZURFOLGE !",1,"ABBRUCH | WEITER ",but%
IF but%=2
FOR j%=0 TO 2
ag(k%,j%)=ag1(k%,j%)
at$(k%,j%)=STR$(ag1(k%,j%))
NEXT j%
ERASE hy()
ERASE intensi()
ERASE huelk%()
simgauss%=0
simlorentz%=0
simgauss_lorentz%=0
simstick%=0
MENU 22,2
MENU 23,2
MENU 21,3
MENU 27,2
MENU 28,2
MENU 31,2
MENU 36,2
MENU 37,2
MENU 38,2
MENU 44,2
ENDIF
FOR j%=0 TO 2
at$(k%,j%)=STR$(ag(k%,j%))
NEXT j%
GOTO ein
ENDIF
ENDIF
FOR j%=0 TO 2
ag(k%,j%)=ag1(k%,j%)
at$(k%,j%)=STR$(ag1(k%,j%))
NEXT j%
naexte:
PRINT AT(36,10);" "
PRINT AT(36,13);" "
PRINT AT(36,16);" "
NEXT k%
eingabeend:
CLS
RETURN
'
PROCEDURE hyper ! Berechnung der Linienzahl eines sim.Spektrums
MENU OFF
LOCAL n,k%,m,m%,i,j%,i%,g,x,z,y,x%,kleii,kleis
DEFTEXT 1,0,0,13
DIM zwn(nika%)
n=1
DEFTEXT 1,0,0,13
FOR k%=1 TO nika%
zwn(k%)=2*ag(k%,0)*ag(k%,1)+1
PRINT "linien der Gruppe ",k%,zwn(k%)
n=n*zwn(k%)
NEXT k%
PRINT "anzahl der Linien N=",n
FOR k%=1 TO nika%
IF zwn(k%)>m
m=zwn(k%)
ENDIF
NEXT k%
' ! Zuordnung der Intensitäten zu den einzelnen
' ! Kopplungen innerhalb einer Atomgruppe
DIM hyp(nika%,m),int(nika%,m)
ARRAYFILL hyp(),0
FOR k%=1 TO nika%
d=(zwn(k%)-1)/2
FOR g=zwn(k%) DOWNTO 1
hyp(k%,g)=d*ag(k%,2)
d=d-1
NEXT g
GOSUB spin
NEXT k%
MENU 21,2
hyperfine: !Hyperfine-Aufspaltung des gesammten Spektrums incl. Intensitäten
DIM h(n),hy(n),intensi(n),in(n)
FOR i%=1 TO n
h(i%)=0
in(i%)=1
NEXT i%
z=1
FOR k%=1 TO nika%
x=0
FOR m=1 TO z
FOR g=1 TO zwn(k%)
INC x
hy(x)=h(m)+hyp(k%,g)
intensi(x)=in(m)*int(k%,g)
NEXT g
NEXT m
z=z*zwn(k%)
FOR x=1 TO z
h(x)=hy(x)
in(x)=intensi(x)
NEXT x
NEXT k%
'
'
reduzierung: !Reduzierung der Gesamtlinienzahl auf die beobachtbaren Linien
'
'
centerfield=10000 ! Da eh nicht absolut gerechnet werden kann ist center-
FOR x=1 TO n ! field so gewählt, daß immer (im Normalfall) die Auf-
h(x)=h(x)+centerfield ! spaltungen im positiven Bereich sind.
NEXT x
ARRAYFILL hy(),0
ARRAYFILL intensi(),0
m=0
FOR x=1 TO n
IF h(x)=0
ELSE
ADD m,1
hy(m)=h(x)
intensi(m)=intensi(x)
FOR y=x TO n
IF hy(m)=h(y)
h(y)=0
~FRE()
ADD intensi(m),in(y)
ENDIF
NEXT y
ENDIF
NEXT x
b=m
'
IF b<n
PRINT " ZUFÄLLIGE ENTARTUNG : NUR NOCH ";b;"-LINIEN ZU SEHEN"
SWAP h(),hy()
SWAP in(),intensi()
ERASE intensi(),hy()
DIM hy(b),intensi(b)
FOR x%=1 TO b
~FRE()
hy(x%)=h(x%)
intensi(x%)=in(x%)
NEXT x%
ENDIF
' ********* Sortierung der Hyperfine-Aufspaltung nach der Größe *******
intmax=0
intmin=1
FOR m=1 TO b
kleis=hy(m)
kleii=intensi(m)
FOR x=m TO b
~FRE()
IF hy(x)<kleis
hy(m)=hy(x)
hy(x)=kleis
kleis=hy(m)
intensi(m)=intensi(x)
intensi(x)=kleii
kleii=intensi(m)
ENDIF
NEXT x
NEXT m
m%=0
DO
INC m%
IF intmax<intensi(m%)
intmax=intensi(m%)
IF intmin>intensi(m%)
intmin=intensi(m%)
ENDIF
ENDIF
EXIT IF m%=b
LOOP
MENU 22,3
MENU 23,3
simstick%=1
ERASE in(),zwn(),h(),hyp(),int()
RETURN
'
PROCEDURE bild ! Zeichnung eines Stick-Line-Spektrums
MENU OFF
CLS
LOCAL null,fak,weite,m
IF sweep=0
IF sw=0
ALERT 3," | | SWEEP-WIDTH IST 0 ! ",1," ABBRUCH ",button%
GOTO bildend
ENDIF
sweep=sw
ENDIF
null=centerfield-sweep*0.5
fak=587/sweep
DEFLINE 1,2,0,0
BOX 27,60,613,360
LINE 27,360,27,365
LINE 321,360,321,365
LINE 613,360,613,365
DEFTEXT 1,0,0,6
PRINT AT(3,2);"Filename: ";finame$;
PRINT AT(3,80);"0.0";
PRINT AT(40,80);sweep*0.5;
PRINT AT(75,80);sweep;
FOR m=1 TO b
weite=(hy(m)-null)*fak
IF weite<0
GOTO weiter
ENDIF
DEFLINE 1,0,0,0
LINE 27+weite,intensi(m)*100/intmax+210,27+weite,210-intensi(m)*100/intmax
weiter:
NEXT m
spektrum!=TRUE
MENU 27,3
HIDEM
SGET x1$
SHOWM
MENU 35,3
MENU 36,3
IF mess!=-1
MENU 44,3
ENDIF
simm!=-1
simess!=0
messplo!=0
bildend:
RETURN
'
PROCEDURE linienform ! Initialisierung der Hüllkurvenform
MENU OFF
LOCAL maus%,bib%,butt%,but%,button%,prog,l%
CLS
simkurve%=simgauss%+simlorentz%+simgauss_lorentz%
IF f_ormstupid!=TRUE
GOTO simstupid
ENDIF
linformein:
maus%=0
DEFTEXT 1,0,0,13
BOX 40,40,600,350
BOX 110,90,530,120
TEXT 120,110,200,"AKTUELLE EINSTELLUNG :"
TEXT 330,110,190,kurform$
BOX 90,170,190,210
TEXT 100,197,80,"GAUß"
BOX 450,170,550,210
TEXT 455,197,90,"GAUß/LORENTZ"
BOX 270,170,370,210
TEXT 280,197,80,"LORENTZ"
GRAPHMODE 2
DEFFILL 1,1
PBOX 250,300,350,330
DEFTEXT 0,0,0,13
TEXT 280,320,50,"OK?"
GRAPHMODE 1
DEFTEXT 1,1,0,13
DO
IF ((90<MOUSEX AND 190>MOUSEX) AND (170<MOUSEY AND 210>MOUSEY) AND MOUSEK=1)
kurve%=1
maus%=1
LET kurform$="GAUßKURVE"
ENDIF
IF ((270<MOUSEX AND 370>MOUSEX) AND (170<MOUSEY AND 210>MOUSEY) AND MOUSEK=1)
maus%=2
kurve%=2
kurform$="LORENTZKURVE"
prol=1
ENDIF
IF ((450<MOUSEX AND 550>MOUSEX) AND (170<MOUSEY AND 210>MOUSEY) AND MOUSEK=1)
maus%=3
kurve%=3
kurform$="GAUß/LORENTZ-KURVE"
ENDIF
IF kurve%>0
IF INKEY$=CHR$(13)
maus%=4
ENDIF
IF ((250<MOUSEX AND 350>MOUSEX) AND (300<MOUSEY AND 330>MOUSEY) AND MOUSEK=1)
maus%=4
ENDIF
ENDIF
EXIT IF maus%<>0
LOOP
IF maus%<4
TEXT 330,110,200," "
GOTO linformein
ENDIF
simstupid: ! Überprüfen ob die Berechnung möglich ist
IF simkurve%=0
IF sw=0
ALERT 3," | | SWEEP-WIDTH IST 0 !",1," ABBRUCH ",butt%
GOTO huellend
ENDIF
IF halbwert=0
ALERT 3," HALBWERTSBREITE IST NICHT | | DEFINIERT ! ",1," ABBRUCH ",butt%
GOTO huellend
ENDIF
ppg=auf/sw
bip=(hy(b)-hy(1)+halbwert*20)*ppg
IF bip<auf
simsw=sw
bi%=auf
ELSE
IF FRE(0)<bi%*24+150000
ALERT 3," | ZU WENIG SPEICHERPLATZ | VORERST NUR ... ",1," ABBRUCH ",but%
GOTO huellend
ENDIF
bi%=INT(bip)
IF 0=EVEN(bi%)
INC bi%
ENDIF
ENDIF
IF bi%*3>65000
ALERT 3," ZU VIELE FELDELEMENTE ZUR | BERECHNUNG DER HÜLLKURVE | VORERST NUR ... ",1," ABBRUCH ",but%
GOTO huellend
ENDIF
simsw=bi%*sw/auf
DIM einh(1,bi%)
ENDIF
ppg=auf/sw
IF halbwert*ppg<1.8
ALERT 3," DAS WIRD SO NIX! | MAL HÖHERE AUFLÖßUNG NEHMEN | BZW. KLEINERE SWEEP-WIDTH ",1," ABBRUCH ",button%
ERASE einh()
GOTO huellend
ENDIF
IF kurve%=1
IF simgauss%=1
prol=0
GOSUB zeichnung
GOTO huellend
ENDIF
GOSUB gauss_lorentz
ENDIF
IF kurve%=2
IF simlorentz%=1
prol=1
GOSUB zeichnung
GOTO huellend
ENDIF
GOSUB gauss_lorentz
ENDIF
IF kurve%=3
IF simgauss_lorentz%=1
ALERT 2," | NEUE KURVE BERECHNEN ? ",2," NEIN | JA ",butt%
IF butt%=1
prol=proz
GOSUB zeichnung
GOTO huellend
ENDIF
ENDIF
IF simgauss%=0
GOSUB gauss_lorentz
ENDIF
CLS
IF f_ormstupid!=TRUE
GOTO stupidlorentz
ENDIF
DEFTEXT 1,0,0,13
PRINT AT(30,12);
INPUT "% Lorentz: ",prol
stupidlorentz:
prol=prol/100
proz=prol
prog=1-prol
l%=0
DO
huelk%(2,l%)=huelk%(0,l%)*prog+huelk%(1,l%)*prol
huelk%(2,bi%-l%)=-huelk%(2,l%)
INC l%
EXIT IF l%>spekha%
LOOP
simgauss_lorentz%=1
GOSUB zeichnung
GOTO huellend
ENDIF
'
GOSUB zeichnung
huellend:
RETURN
'
'
PROCEDURE gauss_lorentz ! Berechnung der Hüllkurve
LOCAL l%,m,max%,start%,sta,beenden%,p,bo,di,qdi,wure,bereich
LOCAL wert,n%,maxgau%,maxlor%,normbereich,feldanfang,mg,ml
LOCAL feld
gpp=sw/auf
wure=SQR(EXP(1))
normbereich=halbwert*20
bereich=hy(b)-hy(1)+normbereich
spekha%=bi%/2
IF bereich>sw
feldanf=centerfield-bereich/2
ELSE
feldanf=centerfield-sw/2
ENDIF
l%=0
m=0
max%=INT(normbereich*ppg)
CLS
DEFTEXT 1,0,0,13
PRINT AT(10,15);"Nur Geduld, Rom wurde auch nicht an einem"
PRINT AT(10,17);"Tag erbaut.................."
DO
INC m
sta=(hy(m)-feldanf-normbereich/2)*ppg
start%=INT(sta)
beenden%=start%+max%
IF start%<l% OR start%=l%
start%=l%
ENDIF
IF beenden%>spekha%
beenden%=spekha%
ENDIF
IF start%<spekha%
FOR l%=start% TO beenden%
p=m
feld=feldanf+gpp*l%
schleife:
h%=FIX(hy(p)*ppg+0.5)
bo=h%*gpp
di=(feld-bo)/halbwert
qdi=di*di
qa=(1+4*qdi/3)^2
wert=wure*di*EXP(-2*qdi)
einh(0,l%)=einh(0,l%)+wert*intensi(p)
einh(1,l%)=einh(1,l%)+16/9*di/qa*intensi(p)
IF p<b
INC p
IF (hy(p)-halbwert*10)<=feld
GOTO schleife
ENDIF
ENDIF
p=m
links:
IF p>=2
DEC p
IF (hy(p)+halbwert*10)>=feld
h%=FIX(hy(p)*ppg+0.5)
bo=h%*gpp
di=(feld-bo)/halbwert
qdi=di*di
qa=(1+4*qdi/3)^2
wert=wure*di*EXP(-2*qdi)
einh(0,l%)=einh(0,l%)+wert*intensi(p)
einh(1,l%)=einh(1,l%)+16/9*di/qa*intensi(p)
ENDIF
GOTO links
ENDIF
NEXT l%
ELSE
l%=start%
ENDIF
EXIT IF l%>=spekha%
LOOP
PRINT AT(20,20);"...aber an einem Tag abgebrannt!"
l%=0
DIM huelk%(2,bi%)
DO
huelk%(0,l%)=CINT(einh(0,l%)*1000000)
IF ABS(huelk%(0,l%))>maxgau%
maxgau%=ABS(huelk%(0,l%))
ENDIF
huelk%(1,l%)=CINT(einh(1,l%)*1000000)
IF ABS(huelk%(1,l%))>maxlor%
maxlor%=ABS(huelk%(1,l%))
ENDIF
INC l%
EXIT IF l%>spekha%
LOOP
mg=1000000/maxgau%
ml=1000000/maxlor%
l%=0
DO
huelk%(0,l%)=CINT(huelk%(0,l%)*mg)
huelk%(0,bi%-l%)=-huelk%(0,l%)
huelk%(1,l%)=CINT(huelk%(1,l%)*ml)
huelk%(1,bi%-l%)=-huelk%(1,l%)
INC l%
EXIT IF l%>spekha%
LOOP
huelk%(0,spekha%)=0
huelk%(1,spekha%)=0
ERASE einh()
simgauss%=1
simlorentz%=1
RETURN
'
PROCEDURE zeichnung ! Zeichnen der Hüllkurve
MENU OFF
CLS
simess!=0
halb!=0
DEFLINE 1,1
LOCAL fa,anf
IF ver=0
ver=1
ENDIF
IF sweep=0
sweep=sw
ENDIF
amb=ROUND(0,2)
mb=ROUND(sweep,2)
BOX 27,60,613,360
DEFLINE 1,1,0,0
LINE 27,360,27,365
LINE 321,360,321,365
LINE 613,360,613,365
DEFTEXT 1,0,0,6
PRINT AT(3,2);"Filename: ";finame$;
PRINT AT(40,2);"Auflösung: ";auf;
PRINT AT(3,5);"Simulierte Sweep Width :";sw;
PRINT AT(40,5);"Halbwertsbreite: ";halbwert
PRINT AT(60,2);" % Lorentz: ";prol*100;
PRINT AT(3,80);amb;
PRINT AT(40,80);mb*0.5;
PRINT AT(75,80);mb;
fa=586/sweep
IF sweep>=simsw
fak=fa*simsw/bi%
start%=CINT((sweep-simsw)/2*fa+27)
anfang%=0
ende%=bi%
ELSE
anf=sweep/2*ppg+0.5
anfang%=spekha%-CINT(anf)
ende%=spekha%+CINT(anf)
fak=586/(ende%-anfang%)
start%=27
ENDIF
GOSUB pinsel
MENU 27,3
MENU 28,3
spektrum!=FALSE
huell!=TRUE
MENU 35,3
MENU 36,3
MENU 37,3
MENU 31,3
MENU 38,3
IF mess!=-1
MENU 44,3
ENDIF
bereichsplott!=FALSE
simm!=-1
messplo!=0
zeichnungende:
HIDEM
SGET x1$
SHOWM
DEFLINE 1,1,0,0
RETURN
'
'
'
' *********VERGRÖßEREUNG D.H. AUSSCHNITT *******************
'
PROCEDURE bereich
MENU OFF
LOCAL maus%,key$,x1,x2,g1,g2,gaus1,gaus2,bereich%,li%,re%,lix,rex
LOCAL l%
CLS
simess!=0
halb!=0
DEFLINE 1,1,0,0
IF bereichsplott!=FALSE
bereichshalbe%=spekha%
sweepbereich=sweep
GOSUB zeichnung
g1=0
g2=0
ELSE
GOSUB pinsel
BOX 27,60,613,360
LINE 27,360,27,365
LINE 321,360,321,365
LINE 613,360,613,365
DEFTEXT 1,0,0,6
PRINT AT(3,2);"Filename: ";finame$;
PRINT AT(40,2);"Auflösung: ";auf;
PRINT AT(3,5);"Simulierte Sweep Width :";sw;
PRINT AT(40,5);"Halbwertsbreite: ";halbwert;
PRINT AT(60,2);" % Lorentz: ";prol*100;
PRINT AT(3,80);amb;
PRINT AT(35,80);ROUND(mb-amb,2);" GAUSS ";
PRINT AT(74,80);mb;
HIDEM
SGET x1$
SHOWM
ENDIF
g1=amb
g2=mb
bereichanfang:
p_line!=FALSE
SPUT x1$
BOX 580,35,613,55
DEFTEXT 1,1,0,13
TEXT 583,50,25,"ESC"
DEFTEXT 1,1,0,6
DO
key$=INKEY$
IF key$=CHR$(27)
maus%=3
ENDIF
IF key$=CHR$(127)
maus%=2
ENDIF
IF MOUSEK>0
maus%=1
ENDIF
IF MOUSEX>580 AND MOUSEY>35
IF MOUSEX<613 AND MOUSEY<55 AND MOUSEK>0
maus%=3
ENDIF
ENDIF
EXIT IF maus%>0
key$=""
LOOP
IF maus%=3
GOTO bereichende
ENDIF
IF maus%=2
bereichshalbe%=spekha%
sweepbereich=sweep
CLS
GOSUB zeichnung
g1=0
g2=0
ENDIF
HIDEM
SGET x1$
SHOWM
DEFLINE 2,1,1,1
SETMOUSE 321,200,0
icks1:
DO !Abfrage der linken Grenze
SPUT x1$
x1=MOUSEX
li%=MOUSEX-27
IF li%<0
li%=0
ENDIF
IF li%>586
li%=586
ENDIF
lix=ROUND(((mb-amb)/586*li%)+amb,2)
PRINT AT(4,7);lix
COLOR 1
LINE x1,60,x1,360
PAUSE 5
IF MOUSEK=1
COLOR 1
LINE x1,60,x1,360
lin=1
HIDEM
SGET x1$
SHOWM
ENDIF
EXIT IF lin=1
LOOP
IF x1<27 OR x1>613
GOTO icks1
ENDIF
icks2:
maus%=0
DO !Abfrage der rechten Grenze
SPUT x1$
x2=MOUSEX
re%=MOUSEX-27
IF re%<0
re%=0
ENDIF
IF re%>586
re%=586
ENDIF
rex=ROUND(((mb-amb)/586*re%)+amb,2)
PRINT AT(14,7);rex;
PRINT AT(24,7);ROUND(rex-lix,2);
COLOR 1
LINE x2,60,x2,360
PAUSE 5
COLOR 1
IF MOUSEK=2
LINE x2,60,x2,360
lin=2
ENDIF
EXIT IF lin=2
LOOP
IF x1=x2
GOTO icks2
ENDIF
IF x2<x1 OR x2>614
GOTO icks2
ENDIF
'
gaus1=((x1-27)*sweepbereich/586)
gaus2=((x2-27)*sweepbereich/586)
'
la%=CINT(bereichshalbe%-(sweepbereich/2-gaus1)*ppg)
le%=CINT(bereichshalbe%-(sweepbereich/2-gaus2)*ppg)
bereich%=le%-la%
fak=586/bereich%
bereichshalbe%=bereich%/2+la%
sweepbereich=gaus2-gaus1
g1=gaus1+g1
g2=g1+sweepbereich
halbe=(g2-g1)*0.5+g1
mb=ROUND(g2,2)
amb=ROUND(g1,2)
fhalbe=ROUND(halbe,2)
'
CLS
DEFLINE 1,1,0,0
BOX 27,60,613,360
LINE 27,360,27,365
LINE 321,360,321,365
LINE 613,360,613,365
DEFTEXT 1,0,0,6
PRINT AT(3,2);"Filename: ";finame$;
PRINT AT(40,2);"Auflösung: ";auf;
PRINT AT(3,5);"Simulierte Sweep Width :";sw;
PRINT AT(40,5);"Halbwertsbreite: ";halbwert;
PRINT AT(60,2);" % Lorentz: ";prol*100;
PRINT AT(3,80);amb;
PRINT AT(35,80);ROUND(mb-amb,2);" GAUSS";
PRINT AT(74,80);mb;
'
IF la%>bi%
p_line!=-1
ENDIF
IF la%<0 OR la%=0
anfang%=0
start%=CINT(ABS(la%*fak)+27)
ENDIF
IF la%>0
anfang%=la%
start%=27
ENDIF
IF le%<0 OR le%=0
p_line!=TRUE
ELSE
IF le%>bi%
ende%=bi%
ELSE
ende%=le%
ENDIF
ENDIF
'
GOSUB pinsel
HIDEM
SGET x1$
SHOWM
GOTO bereichanfang
'
bereichende:
DEFFILL 0,0
PBOX 579,34,614,56
SGET x1$
huell!=FALSE
bereichsplott!=TRUE
messplo!=0
DEFLINE 1,1,0,0
RETURN
'
PROCEDURE pinsel
hoehe=150/1000000
IF simess!=-1
DEFLINE defl%,1,0,0
ELSE
DEFLINE 1,1,0,0
ENDIF
IF p_line!=-1
LINE 27,210+offset%,613,210+offset%
gerade!=-1
ELSE
gerade!=0
DRAW 27,210+offset%
DRAW TO start%,210+offset%
'
FOR l%=anfang% TO ende%
x%=(l%-anfang%)*fak+start%
y%=210+offset%+huelk%(kurve%-1,l%)*hoehe*ver
IF halb!=-1
IF y%<210
y%=210
ENDIF
ENDIF
IF y%>360
y%=360
ENDIF
IF y%<60
y%=60
ENDIF
DRAW TO x%,y%
NEXT l%
DRAW TO 613,210+offset%
ENDIF
DEFLINE 1,1,0,0
IF simess!=-1
HIDEM
SGET x1$
SHOWM
ENDIF
RETURN
' **************EIN-UND AUSGABE ÜBER DISKETTE *************
PROCEDURE lese ! Daten Einlesen
MENU OFF
'
LOCAL wahl$,bakl%,l$
l$=CHR$(GEMDOS(25)+65)
FILESELECT l$+":\DATEN\*.*","",wahl$
IF wahl$=""
GOTO leseende
ENDIF
IF EXIST(wahl$)
ERASE ag()
ERASE ag1()
ERASE hy()
ERASE at$()
ERASE intensi()
ERASE huelk%()
DEFTEXT 1,17,0,17
TEXT 150,150,300,"BIN BEIM LESEN "
VOID FRE(0) ! Wegen der Müllabfuhr!
OPEN "I",#1,wahl$
WHILE NOT EOF(#1)
INPUT #1,nika%
INPUT #1,auf,auf1,sw,sw1,halbwertsbreite,halbwert
INPUT #1,b,sweep,intmin,intmax,centerfield
DIM ag(nika%,2),ag1(nika%,2),at$(nika%,2)
DIM hy(b)
DIM intensi(b)
BGET #1,VARPTR(ag(0,0)),DIM?(ag())*8
BGET #1,VARPTR(hy(0)),DIM?(hy())*8
BGET #1,VARPTR(intensi(0)),DIM?(intensi())*8
'
INPUT #1,simgauss%,simlorentz%,simgauss_lorentz%,bi%,simstick%,spekha%,proz
INPUT #1,simsw
DIM huelk%(2,bi%)
BGET #1,VARPTR(huelk%(0,0)),DIM?(huelk%())*4
WEND
CLOSE
MENU 17,3
MENU 22,3
MENU 23,3
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++
bakl%=RINSTR(wahl$,"\")
finame$=MID$(wahl$,bakl%+1)
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
GOTO leseende
ENDIF
ALERT 1," DATEI IST NICHT | | VORHANDEN !",1," KLAR ? ",but%
'
leseende:
CLS
'
RETURN
'
PROCEDURE schreibe ! Daten auf Disk. schreiben
MENU OFF
'
LOCAL wahl$,l$
IF simkurve%=0
IF simstick%=0
GOTO schreibende
ENDIF
ENDIF
l$=CHR$(GEMDOS(25)+65)
FILESELECT l$+":\DATEN\*.*",finame$,wahl$
IF wahl$=""
GOTO schreibende
ENDIF
IF EXIST(wahl$)
ALERT 1," DATEI EXISTIERT SCHON ! | ACHTUNG ! | DIE DATEI WIRD ÜBERSCHRIEBEN !",1," ABBRUCH | WEITER ",buton%
IF buton%=1
GOTO schreibende
ENDIF
ENDIF
DEFTEXT 1,17,0,17
TEXT 150,150,300,"BIN BEIM SCHREIBEN "
VOID FRE(0) ! wegen der Müllabfuhr !
OPEN "O",#1,wahl$
WRITE #1,nika%
WRITE #1,auf,auf1,sw,sw1,halbwertsbreite,halbwert
WRITE #1,b,sweep,intmin,intmax,centerfield
BPUT #1,VARPTR(ag(0,0)),DIM?(ag())*8
BPUT #1,VARPTR(hy(0)),DIM?(hy())*8
BPUT #1,VARPTR(intensi(0)),DIM?(intensi())*8
'
WRITE #1,simgauss%,simlorentz%,simgauss_lorentz%,bi%,simstick%,spekha%,proz
WRITE #1,simsw
BPUT #1,VARPTR(huelk%(0,0)),DIM?(huelk%())*4
CLOSE
'
schreibende:
CLS
RETURN
'
PROCEDURE loesche ! Der Name sagt alles
LOCAL wahl$,l$,button%,but%
MENU OFF
l$=CHR$(GEMDOS(25)+65)
FILESELECT l$+":\DATEN\*.*","",wahl$
IF wahl$=""
GOTO loeschende
ENDIF
DEFTEXT 1,0,0,13
IF EXIST(wahl$)
ALERT 3," SOLL DIE DATEI | | | WIRKLICH GELÖSCHT WERDEN? ",1," NEIN | JA ",button%
IF button%=2
KILL wahl$
ENDIF
GOTO loeschende
ENDIF
ALERT 1," DATEI IST NICHT | | VORHANDEN !",1," KLAR ? ",but%
loeschende:
RETURN
'
' *************************************************************************
PROCEDURE namensgebung ! Filename
MENU OFF
DEFTEXT 1,0,0,13
BOX 180,175,380,200
PRINT AT(25,12);"Filename: ________.___"
PRINT AT(35,12);
FORM INPUT 12 AS finame$
RETURN
'
'
PROCEDURE fehlerbehandlung ! Versuch um Fehler abzufangen
CLS
LOCAL bott%,bottom%,butt%,fehler$
DEFTEXT 1,1,0,13
fehler$=STR$(ERR)
IF ERR<101
IF ERR=37
CLOSE
IF f_ormstupid!=TRUE
ALERT 1," Disk hat zuwenig Speicher ! | Also nochmal Eintippen! | (Ich hab ja gewarnt!!) | Aber erstmal weiter!",1," TJAAA.. ",bott%
IF bott%=1
RESUME rettung
ENDIF
ELSE
ALERT 1," Diskette hat zu- | wenig Speicherplatz! ",1," KO? ",bottom%
IF bottom%=1
RESUME neustart
ENDIF
ENDIF
ENDIF
IF ERR=22
CLOSE
RESUME neustart
ENDIF
ALERT 2," ÄCHZ! FEHLER "+fehler$+" | IST AUFGETRETEN | NOCH MAL PROBIEREN ? ",1," JA ! | LMAA ! ",butt%
IF butt%=1
RESUME neustart
ELSE
CLS
DEFTEXT 1,16,0,26
PRINT AT(10,20);" NA GOTT SEI DANK !"
END
ENDIF
ENDIF
RETURN
'
'
'
PROCEDURE robot ! Sogenannte Autosimulationsroutine
LOCAL maus%,s_stop%,korr%
MENU OFF
DEFTEXT 1,0,0,13
IF rettung!=-1
GOTO sichern
ENDIF
' **********************************************************************************
GOSUB datenordner
' *****************************************************************************`
diskfrei%=DFREE(0)
' **************************** WIRD AUSDRUCK GEWÜNSCHT ? ***********
ALERT 2," | MIT GLEICHZEITIGEM | AUSDRUCK ? ",1," KLARO | NEEE ",dr%
IF dr%=1
druck!=TRUE
ALERT 2," | AUSDRUCK MIT | PARAMETER ? ",1," NA KLAR | QUATSCH ",par%
IF par%=1
daten!=TRUE
ELSE
daten!=FALSE
ENDIF
ELSE
druck!=FALSE
ENDIF
ALERT 2," | MIT GLEICHZEITIGEM | ABSPEICHERN DER | SPEKTREN ? ",2," SICHER | UNSINN",speicher%
' ********************************************************************
IF finame$=""
finame$="Unfug"
ENDIF
DEFTEXT 1,0,0,13
BOX 180,175,380,200
PRINT AT(25,12);"Filename: ______"
PRINT AT(35,12);
FORM INPUT 6 AS finame$
zaehl$=finame$
CLS
f_ormstupid!=TRUE
simu_eingabe:
laufwerk%=GEMDOS(25)
IF BIOS(&H9,laufwerk%)>0
CHDIR "\"
IF 0<>FSFIRST("daten",-1) !Ist Ordner Daten vorhanden?
MKDIR "DATEN"
ENDIF
diskfrei%=DFREE(0)
CHDIR "DATEN"
ENDIF
DEFTEXT 1,8,0,18
PRINT AT(10,5);
INPUT " Anzahl der simulationen:";simu%
CLS
IF speicher%=1
DEFTEXT 1,1,0,13
IF diskfrei%<simu%*50000
PRINT AT(10,5);"Achtung die Diskette hat nur ";diskfrei%;" Bytes Speicherplatz !";
PRINT AT(10,8);" Das könnte knapp werden !!!! ";
PRINT AT(10,11);"Besser ist es eine neue Diskette zu verwenden oder die ";
PRINT AT(10,14);" Zahl der Simulationen entsprechend zu verringern";
BOX 100,320,200,360
BOX 450,320,550,360
TEXT 120,340,"NA KLAR"
TEXT 470,340,"Risiko"
maus%=0
DO
IF MOUSEY>320 AND MOUSEY<360
IF MOUSEX>100 AND MOUSEX<200 AND MOUSEK=1
maus%=1
ENDIF
IF MOUSEX>450 AND MOUSEX<550 AND MOUSEK=1
maus%=2
ENDIF
ENDIF
EXIT IF maus%>0
LOOP
IF maus%=1
CLS
GOTO simu_eingabe
ENDIF
IF maus%=2
CLS
TEXT 250,50,"Eigenes Risiko!"
ENDIF
ENDIF
ENDIF
'
'
IF speicher%=2
DEFTEXT 1,1,0,13
IF diskfrei%<simu%*1024
PRINT AT(10,5);"Achtung die Diskette hat nur ";diskfrei%;" Bytes Speicherplatz !";
PRINT AT(10,8);" Das wird nicht reichen !!!! ";
PRINT AT(10,11);"Besser ist es eine neue Diskette zu verwenden oder die ";
PRINT AT(10,14);" Zahl der Simulationen entsprechend zu verringern";
BOX 100,320,200,360
BOX 450,320,550,360
TEXT 120,340,"NA KLAR"
TEXT 470,340,"Risiko"
maus%=0
DO
IF MOUSEY>320 AND MOUSEY<360
IF MOUSEX>100 AND MOUSEX<200 AND MOUSEK=1
maus%=1
ENDIF
IF MOUSEX>450 AND MOUSEX<550 AND MOUSEK=1
maus%=2
ENDIF
ENDIF
EXIT IF maus%>0
LOOP
IF maus%=1
CLS
GOTO simu_eingabe
ENDIF
IF maus%=2
CLS
TEXT 200,50,200,"NICHT ZU VIEL RISIKO!"
PAUSE 60
GOTO simu_eingabe
ENDIF
ENDIF
ENDIF
'
'
'
'
IF simu%=0
GOTO robotende
ENDIF
ERASE quark$()
ERASE auswahl$()
IF simstick%=1 OR simgaus%=1
ERASE hy()
ERASE intensi()
ERASE huelk%()
ENDIF
DIM quark$(simu%),auswahl$(simu%)
FOR simulat%=1 TO simu%
quark$(simulat%)="init"+STR$(simulat%)
'
korrektur:
'
DEFTEXT 1,0,0,13
PRINT AT(15,5);" DATENSATZ NUMMER : ";simulat%;" - VON - ";simu%;" - SIMULATIONEN";
'
GOSUB atom
'
GOSUB eingabe
'
IF simulat%=1
auf=1024
auf1=1024
sw=50
sw1=50
halbwert=0.2
halbwertsbreite=0.2
ENDIF
'
GOSUB spektrenparameter
'
CLS
DEFTEXT 1,8,0,18
PRINT AT(14,5);"Auswahl der Hüllkurvenform";
TEXT 120,180,"GAUß"
TEXT 240,180,"LORENTZ"
TEXT 350,180,"GAUß/LORENTZ"
BOX 100,150,500,200
kurve%=0
DO
IF MOUSEY>150 AND MOUSEY<200
IF MOUSEX<180 AND MOUSEX>100 AND MOUSEK=1
kurve%=1
prol=0
ENDIF
IF MOUSEX<320 AND MOUSEX>230 AND MOUSEK=1
kurve%=2
prol=1
ENDIF
IF MOUSEX<500 AND MOUSEX>350 AND MOUSEK=1
kurve%=3
ENDIF
ENDIF
EXIT IF kurve%>0
LOOP
CLS
IF kurve%=3
CLS
PRINT AT(17,5);" Gauß-Lorentz-Kurve";
PRINT AT(17,8);" Eingabe in Prozent";
PRINT AT(20,11);
INPUT "% Lorentz= ";prol
IF prol>100
prol=100
ENDIF
IF prol<0
prol=0
ENDIF
ENDIF
CLS
'
ALERT 2," | | EINGABE IN ORDNUNG ? ",1," SICHER | ÄÄHH | ABBRUCH ",korr%
IF korr%=2
GOTO korrektur
ENDIF
IF korr%=3
ALERT 2," | WIRKLICH DIE AUTO- | SIMULATION BEENDEN ? ",1," NEIN | JA DOCH ",abb%
IF abb%=2
s_top%=simulat%-1
simulat%=simu%
simu%=s_top%
GOTO abbruch
ENDIF
ENDIF
'
OPEN "O",#1,quark$(simulat%)
WRITE #1,nika%
WRITE #1,auf,auf1,sw,sw1,halbwertsbreite,halbwert
FOR j%=1 TO nika%
WRITE #1,ag(j%,0),ag(j%,1),ag(j%,2)
NEXT j%
WRITE #1,kurve%,prol
CLOSE
abbruch:
NEXT simulat%
IF simu%=0
GOTO robotende
ENDIF
'
sichern:
FOR simulat%=1 TO simu%
IF rettung!=-1
GOTO rettungs_schrieb
ENDIF
ERASE ag()
ERASE ag1()
ERASE at$()
datei!=EXIST(quark$(simulat%))
IF datei!=FALSE
CHDIR "\"
ENDIF
datei!=EXIST(quark$(simulat%))
IF datei!=FALSE
CHDIR "\DATEN"
ENDIF
IF EXIST(quark$(simulat%))=FALSE
PRINT "VERDAMMTE SCHEIßE"
END
ENDIF
OPEN "I",#1,quark$(simulat%)
WHILE NOT EOF(#1)
INPUT #1,nika%
INPUT #1,auf,auf1,sw,sw1,halbwertsbreite,halbwert
DIM ag(nika%,2),ag1(nika%,2),at$(nika%,2)
FOR j%=1 TO nika%
INPUT #1,ag(j%,0),ag(j%,1),ag(j%,2)
NEXT j%
INPUT #1,kurve%,prol
WEND
CLOSE
'
auswahl$(simulat%)=zaehl$+STR$(simulat%)
finame$=auswahl$(simulat%)
'
GOSUB hyper
'
GOSUB linienform
'
rettungs_schrieb:
IF speicher%=1
VOID FRE(0)
OPEN "O",#1,auswahl$(simulat%)
WRITE #1,nika%
WRITE #1,auf,auf1,sw,sw1,halbwertsbreite,halbwert
WRITE #1,b,sweep,intmin,intmax,centerfield
BPUT #1,VARPTR(ag(0,0)),DIM?(ag())*8
BPUT #1,VARPTR(hy(0)),DIM?(hy())*8
BPUT #1,VARPTR(intensi(0)),DIM?(intensi())*8
WRITE #1,simgauss%,simlorentz%,simgauss_lorentz%,bi%,simstick%,spekha%,proz
WRITE #1,simsw
BPUT #1,VARPTR(huelk%(0,0)),DIM?(huelk%())*4
CLOSE
ENDIF
IF EXIST(quark$(simulat%))
KILL quark$(simulat%)
ENDIF
'
IF druck!=TRUE ! ABFRAGE OB AUSDRUCK GEWÜNSCHT WIRD
IF OUT?(0)=FALSE ! IST DRUCKER EINGESCHALTET ?
ALERT 3," DRUCKER IST NICHT | EINGESCHALTET ! | EINSCHALTEN ODER OHNE | AUSDRUCK LEBEN ",1," IST EIN | OHNE ",frag%
IF frag%=2
druck!=FALSE
GOTO druck_ende
ENDIF
ENDIF
IF daten!=TRUE
GOSUB datendruck
ENDIF
GOSUB hardcopy
druck_ende:
ENDIF
'
'
IF simulat%<simu%
ERASE hy()
ERASE intensi()
ERASE huelk%()
CLR bi%,proz,bildbereich,b,sw,sweep,auf,auf1,simgauss%,simlorentz%,simgauss_lorentz%
ENDIF
'
rettung!=0
'
CLS
DEFTEXT 1,0,0,13
PRINT "Nächste simulation"
'
'
'
NEXT simulat%
ERASE auswahl$()
ERASE quark$()
robotende:
f_ormstupid!=FALSE
CLS
RETURN
'
rettung: ! Versuch um Daten vor dem Endgültigem Vergessen
CLOSE #1 ! zu retten
rettung!=-1
anzahl%=simu%-simulat% ! Einlesen der Startdaten in den Arbeitsspeicher
IF anzahl%>0
DIM datensatz(50,anzahl%)
ARRAYFILL datensatz(),-1
simret%=0
FOR i=1 TO anzahl%
k%=0
INC simulat%
INC simret%
OPEN "i",#1,quark$(simulat%)
WHILE NOT EOF(#1)
INC k%
INPUT #1,datensatz(k%,simret%)
WEND
CLOSE
KILL quark$(simulat%) ! Löschen des Startdaten -files
NEXT i
ENDIF
ALERT 1," DIESER FILE KANN | GERETTET WERDEN! | DAZU NEUE DISK EINLEGEN | UND WEITERMACHEN !",1," WEITER | ACHWAS ",was%
IF was%=2
GOTO neustart
ENDIF
was_soll_das:
ALERT 2," | NEUE DISKETTE | EINGELEGT ?",1," NA KLAR ",d%
IF BIOS(&H9,laufwerk%)=0
GOTO was_soll_das
ENDIF
ALERT 2," | DISKETTE FORMATIEREN ?| ",2," JA | NEIN ",f%
IF f%=1
GOSUB format
CHDIR "\"
MKDIR "DATEN"
ENDIF
GOSUB datenordner
'
IF anzahl%>0 ! Start Datensatz auf neue Diskette schreiben
simulat%=simu%-anzahl%
FOR simret%=1 TO anzahl%
INC simulat%
OPEN "O",#1,quark$(simulat%)
k%=1
WHILE NOT datensatz(k%,simret%)=-1
WRITE #1,datensatz(k%,simret%)
INC k%
WEND
CLOSE
NEXT simret%
ENDIF
'
GOSUB robot ! Weiter gehts
GOTO neustart
'
'
'
PROCEDURE format
MENU OFF
'
ALERT 3," | SICHER, DAß DIESE | DISKETTE FORMATIERT | WERDEN SOLL ?",1," JA | ABBRUCH ",format%
IF format%=2
GOTO schluss
ENDIF
'
puffer$=SPACE$(10000) ! PUFFER EINRICHTEN
wort=VARPTR(puffer$)
'
' *********** EINGABE DER PARAMETER ********************
'
initialisierung:
ALERT 2,"Anzahl der Tracks ?",2,"80|81|82",track%
IF track%=2 THEN
anz_track%=81
ENDIF
IF track%=1 THEN
anz_track%=80
ENDIF
IF track%=3
anz_track%=82
ENDIF
'
ALERT 2,"Sektoren pro Track ?",1,"9|10|ABBRUCH",track%
IF track%=2 THEN
s.t=10
ENDIF
IF track%=1
s.t=9
ENDIF
IF track%=3
GOTO schluss
ENDIF
'
ALERT 2,"Wie viele Seiten| formatieren ?",2,"Eine|Zwei|Keine",seiten
IF seiten=3
GOTO schluss
ENDIF
'
' *********** GRUNDPARAMETER SETZEN *****************
'
wert=&HE5E5
konst=&H87654321
r.folge=1
side=0
drive=0
'
CLS
DEFTEXT 1,0,0,26,
'
' **** TRACK 1 SEITE 1 UND TRACK 1 SEITE 2 (NUR DOPPELS.) FORMAT ****
'
a=XBIOS(10,L:wort,L:0,drive,s.t,0,0,r.folge,L:konst,0)
GOSUB auswertung
IF seiten=2
a=XBIOS(10,L:wort,L:0,drive,s.t,0,1,r.folge,L:konst,0)
GOSUB auswertung
ENDIF
'
' ********* ALLE ÜBRIGEN TRACKS FORMATIEREN ******************
'
FOR track%=1 TO anz_track%-1
'
seite_1_oder_seite_2_format:
a=XBIOS(10,L:wort,L:0,drive,s.t,track%,side,r.folge,L:konst,wert)
GOSUB auswertung
IF seiten=2
side=side XOR 1 ! AUF ANDERE SEITE UMSCHALTEN
IF side=1
GOTO seite_1_oder_seite_2_format
ENDIF
ENDIF
NEXT track%
'
' ********* BOOTSEKTOR ERSTELLEN *****************
'
a=XBIOS(18,L:wort,L:0,seiten+1,0)
'
anz_sektoren%=anz_track%*s.t*seiten
hi_byte%=anz_sektoren%/256
low_byte%=anz_sektoren%-hi_byte%*256
'
POKE wort+19,low_byte% ! GESAMMTANZAHL DER SEKTOREN DER DISK EINTRAGEN
POKE wort+20,hi_byte%
'
IF seiten=1
POKE wort+21,&HF8 ! EINSEITIGE DISK
ELSE
POKE wort+21,&HF9 ! DOPPELSEITIGE DISK
ENDIF
'
POKE wort+24,s.t ! SEKTOREN PRO TRACK EINTRAGEN
POKE wort+25,0
'
' **************** BOOTSEKTOR SCHREIBEN *************
'
a=XBIOS(9,L:wort,L:0,drive,1,0,0,1)
'
' *************** GRUNDEINTRÄGE DER FAT ERSTELLEN ************
'
LPOKE wort,&HF7FFFF00
FOR i=3 TO 511
POKE wort+i,0
NEXT i
'
' ******* 1.FAT BEI EIN- UND ZWEISEITIGER DISK SCHREIBEN ********
'
anf_sek%=2
anz_sek%=1
track%=0
a=XBIOS(9,L:wort,L:0,drive,anf_sek%,track%,side,anz_sek%)
'
' ********* 2. FAT BEI EIN-UND ZWEISEITIGER DISK SCHREIBEN ******
'
anf_sek%=7
a=XBIOS(9,L:wort,L:0,drive,anf_sek%,track%,side,anz_sek%)
'
schluss:
RETURN
' *************** FEHLERAUSWERTUNG ***********************
'
PROCEDURE auswertung
IF a=0
x%=CINT(3600/anz_track%)
w%=x%*track%
IF track%=anz_track%-1
w%=3600
ENDIF
IF seiten=2
DEFFILL 1,2,9
PCIRCLE 320,200,150,0,w%
DEFFILL 1,2,19
PCIRCLE 320,200,75,0,w%
ELSE
DEFFILL 1,2,1
PCIRCLE 320,200,150,0,w%
ENDIF
ELSE
alarm$="FEHLER AUF| |SEITE "+STR$(side)+" TRACK "+STR$(track%)
ALERT 1,alarm$,1," ABBRUCH | WEITER ",e%
IF e%=1
RESUME neustart
ENDIF
ENDIF
RETURN
'
PROCEDURE hardcopy ! Der Name sagt auch schon alles
LOCAL i%,l%,spek$
IF OUT?(0)=FALSE ! übliche Überprüfungen
ALERT 3," | DRUCKER BITTE | EINSCHALTEN ! ",1," JA JA | MOG NET ",soso%
IF soso%=2
GOTO copy_ende
ENDIF
ENDIF
IF OUT?(0)=FALSE
DEFTEXT 1,1,0,13
PRINT AT(30,10);" WITZBOLD !!"
PAUSE 30
GOTO copy_ende
ENDIF
IF f_ormstupid!=FALSE
ALERT 2," | AUSDRUCK MIT | PARAMETER ? ",1," NA KLAR | QUATSCH ",par%
IF par%=1
GOSUB datendruck
ENDIF
ENDIF
DEFTEXT 1,17,0,17
TEXT 150,150,300,"BIN BEIM DRUCKEN "
MENU OFF ! Hardcopyrutine
LPRINT CHR$(27);CHR$(108);CHR$(5); ! linker Rand
LPRINT CHR$(27);CHR$(65);CHR$(8); ! Zeilenvorschub auf 8/60 Zoll
FOR i%=1 TO 80
spek$=""
FOR l%=399 TO 0 STEP -1
spek$=spek$+MID$(x1$,(l%*80)+i%,1)
NEXT l%
LPRINT CHR$(27);"*";CHR$(0);CHR$(144);CHR$(1);spek$
NEXT i%
LPRINT CHR$(13);
LPRINT CHR$(12); ! Nächste Seite
LPRINT CHR$(27);CHR$(64); ! DRUCKER RESET
'
DO
EXIT IF OUT?(0)=TRUE
LOOP
'
'
copy_ende:
CLS
RETURN
'
PROCEDURE datendruck ! Ausdruck der Startdatensätze
MENU OFF
IF messplo!=-1
DEFTEXT 1,17,0,17
TEXT 50,100,500,"DIE SOLLTE MANN/FRAU SCHON HABEN ! "
GOTO datendruckende
ENDIF
LPRINT CHR$(27);CHR$(108);CHR$(15); ! Linker Rand
LPRINT CHR$(27);"E";
LPRINT finame$
LPRINT CHR$(27);"F";
LPRINT CHR$(27);CHR$(74);CHR$(90); ! Zeilen vorschub
LPRINT CHR$(27);CHR$(108);CHR$(15); ! Linker Rand
LPRINT "Anzahl der unabhängigen Atome: ";
LPRINT nika%;
LPRINT CHR$(27);CHR$(74);CHR$(90); ! Zeilen vorschub
LPRINT CHR$(27);CHR$(108);CHR$(15); ! Linker Rand
LPRINT CHR$(27);CHR$(45);CHR$(1); ! Unterstrichen
LPRINT "Kernparameter";
LPRINT CHR$(27);CHR$(45);CHR$(0);
LPRINT CHR$(27);CHR$(74);CHR$(50);
LPRINT CHR$(27);CHR$(108);CHR$(15);
FOR i=1 TO nika%
LPRINT "Atomgruppe: ",i
LPRINT CHR$(10);
LPRINT "Kernspin : ",ag(i,0);
LPRINT CHR$(10);
LPRINT "Anzahl der Kerne: ",ag(i,1);
LPRINT CHR$(10);
LPRINT "Kopplungskonstante",ag(i,2),
LPRINT CHR$(10);
LPRINT "****************************************"
LPRINT CHR$(10);
NEXT i
LPRINT CHR$(27);CHR$(74);CHR$(90); !Zeilen vorschub
LPRINT CHR$(27);CHR$(108);CHR$(15); !Linker Rand
LPRINT "Sweep-width (in Gauss): ",sweep
LPRINT CHR$(10);
LPRINT "Halbwertsbreite (in Gauss):",halbwert,
LPRINT CHR$(10);
LPRINT "Auflösung (in Punkte): ",auf
LPRINT CHR$(10);
LPRINT "Prozent Lorentzcharakter: ",prol*100,
LPRINT CHR$(12);
'
DO
EXIT IF OUT?(0)=TRUE
LOOP
datendruckende:
'
RETURN
'
PROCEDURE spin ! Berechnung der nor -
LOCAL atome%,anzahl%,aufspaltung%,zaehl%,max%,imax% ! mierten Intensitäten
atome%=ag(k%,1) ! für ungewöhnlich viele
aufspaltung%=INT(ag(k%,0)*2+1) ! Atome und "seltene"
anzahl%=INT(ag(k%,0)*2*ag(k%,1)+1) ! Spinquantenzahlen
DIM rechenfeld%(anzahl%),inten%(anzahl%)
rechenfeld%(1)=1
DO
DEC atome%
EXIT IF atome%<0
ARRAYFILL inten%(),0
zaehl%=0
DO
INC zaehl%
FOR z%=zaehl% TO (aufspaltung%+zaehl%-1)
IF z%<anzahl% OR z%=anzahl%
ADD inten%(z%),rechenfeld%(zaehl%)
ENDIF
NEXT z%
EXIT IF zaehl%=anzahl%
LOOP
SWAP rechenfeld%(),inten%()
LOOP
max%=INT(anzahl%/2+1)
imax%=rechenfeld%(max%)
FOR z%=1 TO anzahl%
int(k%,z%)=rechenfeld%(z%)/imax%
NEXT z%
ERASE rechenfeld%()
ERASE inten%()
RETURN
'
PROCEDURE aufblasen
MENU OFF
DEFTEXT 1,0,0,13
PRINT AT(25,10);
INPUT "VERGRÖßERUNGSFAKTOR: ";ver
ver=ABS(ver)
PRINT ver
IF ver=0
ver=1
ENDIF
GOSUB zeichnung
RETURN
'
PROCEDURE hp7475a
MENU OFF
BOUNDARY 1
LOCAL stil%,lin%,leng,xin,yin,a,a$,x1,y1,maus,beenden!,yw%,penr%,pens%
LOCAL butt%,antwort%,i%,z%,p1%,m_sweep,s_sweep
m_sweep=ROUND(mend-manf,2)
s_sweep=ROUND(mb-amb,2)
IF simess!=-1
z%=2
ELSE
z%=1
ENDIF
DO UNTIL i%=z%
INC i%
IF i%=2
TEXT 460,80,penr%
TEXT 460,230,pens%
ENDIF
stift:
GRAPHMODE 2
DEFFILL 1,2,1
PBOX 300,20,360,50
DEFFILL 1,0
DEFTEXT 1,16,0,18
TEXT 160,80,300,"STIFT FÜR DEN RAHMEN: "
TEXT 160,230,300,"STIFT FÜR DAS SPEKTRUM: "
DEFTEXT 1,0,0,15
IF simess!=-1
IF i%=1
TEXT 110,43,170,"SIMULIERTES - "
ELSE
TEXT 100,43,"GEMESSENES - "
ENDIF
TEXT 400,43,170,"SPEKTRUM"
ENDIF
TEXT 315,43,30,"OK"
'
BOX 40,350,600,380
TEXT 50,370,100,"LINIENFORM:"
IF i%=1
TEXT 350,370,"PATTERNLÄNGE:"
lin%=0
ENDIF
xin=30
yin=130
a$="1"
a=1
FOR i=1 TO 6
ADD xin,80
x1=xin
y1=yin
FOR d=1 TO 2
TEXT x1+16,y1+24,a$
x2=x1+40
y2=y1+40
PBOX x1,y1,x2,y2
y1=yin+150
NEXT d
INC a
a$=STR$(a)
NEXT i
maus=0
GRAPHMODE 1
DEFTEXT 1,16,0,18
DEFLINE 1,1
LINE 180,365,300,365
DO
IF INKEY$=CHR$(27)
maus=2
beenden!=-1
ENDIF
IF INKEY$=CHR$(13)
maus=2
ENDIF
IF MOUSEK=1
IF i%=1
IF MOUSEY>350 AND MOUSEY<380 AND MOUSEX>350 AND MOUSEX<600
INC leng
IF leng>20
leng=1
ENDIF
PAUSE 10
TEXT 500,370," "
TEXT 500,370,STR$(leng)
ENDIF
IF MOUSEY>350 AND MOUSEY<380 AND MOUSEX>180 AND MOUSEX<300
INC lin%
IF lin%>5
lin%=0
ENDIF
IF lin%=0
stil%=1
ENDIF
IF lin%=1
stil%=3
ENDIF
IF lin%=2
stil%=5
ENDIF
IF lin%=3
stil%=2
ENDIF
IF lin%=4
stil%=4
ENDIF
IF lin%=5
stil%=6
ENDIF
TEXT 180,370,120," "
DEFLINE stil%,1
LINE 180,365,300,365
DEFLINE 1,1,0,0
PAUSE 10
ENDIF
ENDIF
TEXT 460,80,penr%
TEXT 460,230,pens%
IF MOUSEY>130 AND MOUSEY<170
yw%=1
ENDIF
IF MOUSEY>280 AND MOUSEY<320
yw%=2
ENDIF
IF MOUSEX>110 AND MOUSEX<150
IF yw%=1
penr%=1
ENDIF
IF yw%=2
pens%=1
ENDIF
ENDIF
IF MOUSEX>190 AND MOUSEX<230
IF yw%=1
penr%=2
ENDIF
IF yw%=2
pens%=2
ENDIF
ENDIF
IF MOUSEX>270 AND MOUSEX<310
IF yw%=1
penr%=3
ENDIF
IF yw%=2
pens%=3
ENDIF
ENDIF
IF MOUSEX>350 AND MOUSEX<390
IF yw%=1
penr%=4
ENDIF
IF yw%=2
pens%=4
ENDIF
ENDIF
IF MOUSEX>430 AND MOUSEX<470
IF yw%=1
penr%=5
ENDIF
IF yw%=2
pens%=5
ENDIF
ENDIF
IF MOUSEX>510 AND MOUSEX<550
IF yw%=1
penr%=6
ENDIF
IF yw%=2
pens%=6
ENDIF
ENDIF
IF MOUSEX>300 AND MOUSEX<360 AND MOUSEY>20 AND MOUSEY<50
maus=2
ENDIF
ENDIF
EXIT IF maus=2
LOOP
IF z%=2 AND i%=1
pr%=penr%
ps1%=pens%
ENDIF
IF beenden!=-1
GOTO hp_ende
ENDIF
rahmen_aus!=FALSE
IF penr%=0
ALERT 2," | KEINE BESCHRIFTUNG ??? ",1," HÄ ? | EIJO ! ",butt%
IF butt%=1
GOTO stift
ELSE
rahmen_aus!=TRUE
ENDIF
ENDIF
IF pens%=0
ALERT 2," | KEIN SPEKTRUM ?????? ",1," OHJE ! | JA | ???? ",butt%
IF butt%=1
GOTO stift
ENDIF
IF butt%=2
ALERT 2," | SCHWABE ODER SCHOTTE ? ",2," SO ISSES | HANOI ",antwort%
IF antwort%=2
CLS
TEXT 100,150,400," SELTSAM, SELTSAM........"
PAUSE 120
ENDIF
ENDIF
IF butt%=3
ALERT 2," SIND SIE EIN | | ORGANIKER ? ",1," JA | NEIN ",antwort%
CLS
IF antwort%=1
TEXT 100,150,400," DACHT ICH MIR DOCH GLEICH!"
ELSE
TEXT 100,150,400," HÄTTEN SIE ABER WERDEN KÖNNEN ! "
ENDIF
PAUSE 120
ENDIF
ENDIF
IF penr%=0 AND pens%=0
CLS
TEXT 150,150,300,"GEIZHALS!!!!!"
PAUSE 150
CLS
GOTO stift
ENDIF
'
IF i%=1
p1%=pens%
ENDIF
CLS
LOOP
ALERT 2," | PLOTTEN ?",1," EI JO | NEEEE ",butt%
IF butt%=2
GOTO hp_ende
ENDIF
TEXT 160,150,300,"Bin beim Plotten!"
'
OPEN "",#3,"AUX:"
PRINT #3,"IN;"
IF rahmen_aus!=FALSE
GOSUB text
DELAY 50
GOSUB rahmen
DELAY 80
ENDIF
GOSUB plott
PRINT #3,"PU;SP0"
PRINT #3,"DF"
CLOSE #3
hp_ende:
CLS
DEFLINE 1,1
RETURN
'
PROCEDURE text
prozl=prol*100
PRINT #3,"SP";penr%;
PRINT #3,"pa2000,7480;"
PRINT #3,"CS0;SR3,3;"
PRINT #3,"lbSYSIPHUS - PLOT";CHR$(3)
PRINT #3,"Pa2020,7460;LbSYSIPHUS - PLOT";CHR$(3)
PRINT #3,"PA600,7350,PD10600,7350,PU;"
PRINT #3,"SR.7,1;"
IF (bereichsplott! OR huell!) OR simess!
PRINT #3,"PA2800,7200;LBSIMULIERTES SPEKTRUM: ";CHR$(3)
IF lin%>0
PRINT #3,"LT",lin%,leng;
ENDIF
PRINT #3,"SP";p1%;"VS,2;"
PRINT #3,"PA5500,7225,PD8000,7225,PU;"
PRINT #3,"SP";penr%;
PRINT #3,"LT,VS;";
PRINT #3,"PA600,7050;LBFILENAME: ";finame$;CHR$(3)
PRINT #3,"PA3800,7050;CS33;LBAUFL";CHR$(92);"SUNG: ";auf;CHR$(3)
PRINT #3,"PA7000,7050;LB%-LORENTZCHARAKTER: ";prozl;CHR$(3)
PRINT #3,"PA600,6925;CS0;LBHALBWERSTBREITE: ";halbwert;CHR$(3)
PRINT #3,"PA3800,6925;LBSIMULIERTE SWEEP-WEITE: ";sw;CHR$(3)
PRINT #3,"PA7000,6925;LBSWEEP-WEITE: ";s_sweep;CHR$(3)
DELAY 10
ENDIF
PRINT #3,"PA600,6775,PD10600,6775,PU;"
IF messplo!=-1
PRINT #3,"PA2800,6625;LBGEMESSENES SPEKTRUM: ";CHR$(3)
PRINT #3,"sp",pens%;"VS,2;"
PRINT #3,"PA5500,6650,PD8000,6650,PU;"
PRINT #3,"sp";penr%;"VS;"
PRINT #3,"PA600,6500;LBFILENAME: ";mess$;CHR$(3)
PRINT #3,"PA3800,6500;LBRESOLUTION: ";res%;CHR$(3)
PRINT #3,"PA7000,6500;LBCENTERFIELD: ";ROUND(cf,2);CHR$(3)
PRINT #3,"PA600,6375;LBGEMESSENE SWEEP-WEITE: ";spsw;CHR$(3)
PRINT #3,"PA7000,6375;LBSWEEP-WEITE: ";m_sweep;CHR$(3)
PRINT #3,"PA600,6225,PD10600,6225,PU;"
DELAY 10
ENDIF
RETURN
'
PROCEDURE rahmen
LOCAL l$,r$,mit$,s_sweep,m_sweep,lm$,rm$,mitm$,ls$,rs$,mits$
s_sweep=ROUND(mb-amb,2)
m_sweep=ROUND(mend-manf,2)
'
lm$=SPACE$(7)
RSET lm$=STR$(ROUND(manf,2))
rm$=SPACE$(7)
rm$=STR$(ROUND(mend,2))
mitm$=SPACE$(7)
RSET mitm$=STR$(m_sweep)
l1$=STR$(ROUND(amb,2))
IF l1$="0"
l1$="0.00"
ENDIF
ls$=l1$
rs$=STR$(ROUND(mb,2))
mits$=STR$(s_sweep)
l$=SPACE$(7)
mit$=SPACE$(7)
r$=SPACE$(7)
'
PRINT #3,"PU,600,600,PD,600,5620,10600,5620,10600,600,600,600;"
PRINT #3,"PU600,600,PD600,520,PU,5600,600,PD,5600,520,PU10600,600PD10600,520,PU;"
IF simess!=-1
PRINT #3,"PU600,5620,PD600,5700,PU,5600,5620,PD,5600,5700,PU10600,5620PD10600,5700,PU;"
ENDIF
IF simess!=-1
RSET l$=ls$
RSET mit$=mits$
RSET r$=rs$
ELSE
IF messplo!=-1
RSET l$=lm$
RSET mit$=mitm$
RSET r$=rm$
ELSE
RSET l$=ls$
RSET r$=rs$
RSET mit$=mits$
ENDIF
ENDIF
PRINT #3,"PA80,380,LB"+l$;CHR$(3)
PRINT #3,"PA4000,380,LBSWEEP-WEITE"+mit$+" GAUSS";CHR$(3)
PRINT #3,"PA10100,380,LB"+r$;CHR$(3)
IF simess!=-1
PRINT #3,"PA80,5900,LB"+lm$;CHR$(3)
PRINT #3,"PA4000,5800,LBSWEEP-WEITE"+mitm$+" GAUSS";CHR$(3)
PRINT #3,"PA10100,5800,LB"+rm$;CHR$(3)
ENDIF
RETURN
'
PROCEDURE plott
LOCAL x%,y%,app%,plo%,links%,vgl,off%
PRINT #3,"IP600,600,10600,5620;"
IF simess!=-1
IF halb!=-1
vgl=0.5
off%=5000
ELSE
vgl=1
off%=0
ENDIF
ELSE
vgl=1
off%=0
ENDIF
IF messplo!=-1
PRINT #3,"SP";pens%;
app%=mende%-mstart%+1
PRINT #3,"SC1",app%,"-10010,10010;"
PRINT #3,"PU,1,0;"
PRINT #3,"PA",1,off%;
IF mstart%<res%
y%=mstart%
DO
INC x%
IF y%<1
plo%=0
PRINT #3,"PU";
plo%=off%
ELSE
PRINT #3,"PD";
plo%=CINT(spek%(y%)*vgl/100)+off%
ENDIF
IF plo%>10010
plo%=10010
ENDIF
IF halb!=-1
IF plo%<0
plo%=0
ENDIF
ENDIF
IF plo%<-10010
plo%=-10010
ENDIF
PRINT #3,"PA",x%,plo%;
DELAY 0.5
IF y%=res%
x%=app%
ENDIF
EXIT IF x%=app%
INC y%
LOOP
PRINT #3,"PU;"
ENDIF
ENDIF
'
IF (huell! OR bereichsplott!) OR simess!
IF lin%=0
PRINT #3,"LT";
ELSE
PRINT #3,"LT",lin%,leng;
ENDIF
PRINT #3,"SP";p1%;
vgl=ver*vgl
off%=-off%
app%=5860
PRINT #3,"SC1",app%,"-10010,10010;"
PRINT #3,"PU,1,0;"
PRINT #3,"PA",1,off%,"PD;"
IF gerade!=TRUE
PRINT #3,"VS",2,";"
PRINT #3,"PA",app%,off%;
PRINT #3,"VS",";"
ELSE
xa%=(start%-27)*10
IF xa%=0
xa%=1
ENDIF
PRINT #3,"VS",1,";"
PRINT #3,"PA",xa%,off%;
PRINT #3,"VS",";"
FOR y%=anfang% TO ende%
x%=(y%-anfang%)*fak*10+xa%
plo%=CINT(-huelk%(kurve%-1,y%)*vgl/100)+off%
IF plo%>10010
plo%=10010
ENDIF
IF halb!=-1
IF plo%>0
plo%=0
ENDIF
ENDIF
IF plo%<-10010
plo%=-10010
ENDIF
PRINT #3,"PA";x%,plo%;
DELAY 0.5
NEXT y%
PRINT #3,"VS",1,";"
PRINT #3,"PA",app%,off%;
PRINT #3,"VS",";"
ENDIF
ENDIF
'
RETURN
'
PROCEDURE pixel
MENU OFF
LOCAL wahl$,c$,punkt%,d%,bakl%,button%,l$
'
IF messplo!=-1
c$=mess$
ELSE
punkt%=RINSTR(finame$,".")
bakl%=RINSTR(finame$,"\")
d%=punkt%-bakl%-1
IF d%<0
d%=8
ENDIF
c$=MID$(finame$,bakl%+1,d%)
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++
ENDIF
'
pixelanf:
l$=CHR$(GEMDOS(25)+65)
'
FILESELECT l$+":\*.PIC",c$+".PIC",wahl$
IF wahl$>""
IF EXIST(wahl$)
ALERT 1," DATEI EXISTIERT SCHON ! | ACHTUNG ! | DIE DATEI WIRD ÜBERSCHRIEBEN !",1," ABBRUCH | WEITER ",buton%
IF buton%=1
GOTO pixelanf
ENDIF
ENDIF
CLS
SPUT x1$
OPEN "O",#1,wahl$
BPUT #1,XBIOS(2),32000
CLOSE
ENDIF
RETURN
'
'
PROCEDURE gwert
MENU OFF
LOCAL stand1$,stand2$,stand3$,b1$,b2$,b1,b2
CLS
DIM stand$(3)
CHDIR "\"
CHDIR "\DATEN"
IF EXIST("G_WERT.PAR")
OPEN "I",#1,"G_WERT.PAR"
INPUT #1,wahl$
INPUT #1,b1,b2
CLOSE
IF EXIST(wahl$)
OPEN "I",#1,wahl$
FOR i%=1 TO 3
INPUT #1,stand$(i%)
NEXT i%
ENDIF
CLOSE
ENDIF
GOSUB gwertbeschrift
CLS
ERASE stand$()
RETURN
PROCEDURE gwertbeschrift
CLS
stand1$=stand$(1)
stand2$=stand$(2)
stand3$=stand$(3)
b1$=SPACE$(7)
b2$=SPACE$(7)
b1$=STR$(b1)
b2$=STR$(b2)
GOSUB muster
GOSUB kaufhaus
RETURN
PROCEDURE muster
DEFMOUSE bitmuster$
DEFTEXT 1,0,0,13
BOX 30,40,610,360
BOX 40,50,600,350
FILL 45,45
BOX 160,60,480,80
TEXT 170,75,300,"g-WERT-Berechnung"
BOX 70,100,590,120
TEXT 75,115,80,"Standard:"
TEXT 170,115,stand1$
BOX 70,130,590,150
TEXT 75,145,80,"g-WERT:"
TEXT 170,145,stand2$
BOX 70,160,590,180
TEXT 75,175,80,"Kommentar:"
TEXT 170,175,stand3$
BOX 70,189,590,211
TEXT 75,205,115,"Feld [ in Gauß ]"
BOX 73,191,587,209
FILL 71,190
DEFLINE 1,3
LINE 205,190,205,210
TEXT 220,205,70,"Standard:"
DEFLINE 0,0
BOX 293,190,308,210
BOX 383,190,398,210
BOX 473,190,488,210
BOX 563,190,578,210
TEXT 296,206,"⇦"
TEXT 296,206,"⇦"
TEXT 386,206,"⇨"
TEXT 476,206,"⇦"
TEXT 566,206,"⇨"
TEXT 310,205,70,b1$
TEXT 400,205,70,"Probe:"
TEXT 490,205,70,b2$
DEFLINE 1,0
BOX 160,225,480,255
BOX 155,220,485,260
DEFFILL 1,2,9
FILL 158,256
DEFTEXT 1,16,0,17
TEXT 170,247,100,"g-Wert ="
BOX 350,270,580,340
BOX 70,270,300,340
BOX 100,275,270,295
BOX 100,310,270,330
BOX 380,275,550,295
DEFTEXT 1,0,0,13
TEXT 400,290,130," Standard "
TEXT 120,290,130," Berechnen "
TEXT 120,325,130," ADELE "
BOX 360,310,420,330
BOX 435,310,495,330
BOX 510,310,570,330
TEXT 365,325,50,"NEUER"
TEXT 440,325,50,"LADEN"
TEXT 512,325,55,"SICHERN"
DEFFILL 1,4
FILL 72,272
DEFFILL 1,2,16
FILL 352,272
DEFFILL 1,2,20
FILL 55,55
RETURN
PROCEDURE kaufhaus
DEFMOUSE bitmuster$
DO
IF MOUSEY>190 AND MOUSEY<210
IF MOUSEK>0
IF MOUSEX>293 AND MOUSEX<308
p%=1
GOSUB aufnieder1
ENDIF
IF MOUSEX>383 AND MOUSEX<398
p%=2
GOSUB aufnieder1
ENDIF
IF MOUSEX>473 AND MOUSEX<488
p%=3
GOSUB aufnieder2
ENDIF
IF MOUSEX>565 AND MOUSEX<578
p%=4
GOSUB aufnieder2
ENDIF
ENDIF
ENDIF
IF MOUSEX>100 AND MOUSEX<270
IF MOUSEK>0
IF MOUSEY>275 AND MOUSEY<295
GOSUB berechnen
ENDIF
IF MOUSEY>310 AND MOUSEY<330
GOTO gwertende
ENDIF
ENDIF
ENDIF
IF MOUSEY>310 AND MOUSEY<330
IF MOUSEK>0
IF MOUSEX>360 AND MOUSEX<420
GOSUB dateneingabe
ENDIF
IF MOUSEX>435 AND MOUSEX<495
GOSUB lade
GOSUB gwertbeschrift
ENDIF
IF MOUSEX>510 AND MOUSEX<570
GOSUB speicher
ENDIF
ENDIF
ENDIF
LOOP
gwertende:
RETURN
PROCEDURE aufnieder1
IF p%=1
IF MOUSEK=1
ADD b1,0.01
ELSE
ADD b1,1
ENDIF
PAUSE 8
ENDIF
IF p%=2
IF MOUSEK=1
SUB b1,0.01
ELSE
SUB b1,1
ENDIF
PAUSE 8
ENDIF
b1=ROUND(b1,2)
b=b1*100
b$=SPACE$(7)
RSET b$=STR$(b)
b1$=MID$(b$,1,5)+"."+MID$(b$,6)+" "
TEXT 310,205,b1$
RETURN
PROCEDURE aufnieder2
IF p%=3
IF MOUSEK=1
ADD b2,0.01
ELSE
ADD b2,1
ENDIF
PAUSE 8
ENDIF
IF p%=4
IF MOUSEK=1
SUB b2,0.01
ELSE
SUB b2,1
ENDIF
PAUSE 8
ENDIF
b2=ROUND(b2,2)
b=b2*100
b$=SPACE$(7)
RSET b$=STR$(b)
b2$=MID$(b$,1,5)+"."+MID$(b$,6)+" "
TEXT 490,205,70,b2$
RETURN
PROCEDURE dateneingabe
CLS
BOX 40,50,600,360
PRINT AT(20,8);
PRINT AT(10,8);"Standard: ";stand1$
PRINT AT(10,12);"g-Wert: ";stand2$
PRINT AT(10,16);"Kommentar:";stand3$
PRINT AT(10,20);"Feld [ in Gauß ]:"
PRINT AT(30,20);"Standard: ";b1$
PRINT AT(55,20);"Probe: ";b2$
PRINT AT(20,8);
FORM INPUT 50 AS stand1$
stand$(1)=stand1$
PRINT AT(20,12);
FORM INPUT 10 AS stand2$
stand$(2)=stand2$
PRINT AT(20,16);
FORM INPUT 50 AS stand3$
stand$(3)=stand3$
PRINT AT(41,20);
FORM INPUT 7 AS b1$
PRINT AT(65,20);
FORM INPUT 7 AS b2$
b1=VAL(b1$)
b2=VAL(b2$)
CLS
GOSUB muster
RETURN
PROCEDURE speicher
LOCAL wahl$,l$,but%
l$=CHR$(GEMDOS(25)+65)
FILESELECT l$+":\daten\*.gwe",".gwe",wahl$
IF wahl$=""
GOTO schreibend
ENDIF
OPEN "O",#1,wahl$
FOR n%=1 TO 3
WRITE #1,stand$(n%)
NEXT n%
CLOSE
ALERT 2," SOLLEN DIE PARAMETER | FILENAME UND FELDSRTÄRKEN | MIT ABGESPEICHERT WERDEN? ",1," FREILI | HÄH ",but%
IF but%=1
OPEN "O",#1,"G_WERT.PAR"
WRITE #1,wahl$
WRITE #1,b1,b2
CLOSE
ENDIF
schreibend:
DEFMOUSE bitmuster$
RETURN
PROCEDURE lade
LOCAL wahl$,l$,but%
l$=CHR$(GEMDOS(25)+65)
FILESELECT l$+":\daten\*.GWE",".GWE",wahl$
IF wahl$=""
GOTO lesend
ENDIF
IF EXIST(wahl$)
OPEN "I",#1,wahl$
FOR i%=1 TO 3
INPUT #1,stand$(i%)
NEXT i%
CLOSE
ELSE
ALERT 1," SORRY OPEN ERROR | | (keine Datei gefunden) ",1,"NICHT OK",but%
ENDIF
lesend:
DEFMOUSE bitmuster$
RETURN
PROCEDURE berechnen
LOCAL gwert$,g$,gstan,gwert
gstan=VAL(stand2$)
gwert=gstan*b1/b2
gwert$=STR$(gwert)
g$=SPACE$(7)
LSET g$=MID$(gwert$,1,1)+"."+MID$(gwert$,3,5)+"000000"
DEFTEXT 1,16,0,17
TEXT 280,247,g$
DEFTEXT 1,0,0,13
RETURN
'
'
PROCEDURE rausch
LOCAL r%,x%,y%,i%,l%,maus%,bereich,r,zufall,auf,fak,rausch
IF huell!=-1 OR bereichsplott!=-1
CLS
'
BOX 49,150,601,251
LINE 49,199,601,199
LINE 49,251,49,265
LINE 320,251,320,265
LINE 601,251,601,265
DEFFILL 1,2,14
PBOX 100,300,550,350
DEFTEXT 1,16,0,13
TEXT 120,330,410," Gut gerauscht ist halb betrogen , oder ? "
DEFTEXT 1,0,0,13
TEXT 40,275,"0 %"
TEXT 311,275,"50 %"
TEXT 590,275,"100 %"
TEXT 100,180,200," Prozent Grundrauschen :"
DO UNTIL maus%=1
IF MOUSEY>300 AND MOUSEY<350 AND MOUSEX>100 AND MOUSEX<550 AND MOUSEK=1
maus%=1
ENDIF
IF MOUSEK=2
maus%=1
ENDIF
IF INKEY$=CHR$(13)
maus%=1
ENDIF
IF MOUSEY>200 AND MOUSEY<250
x%=MOUSEX
IF MOUSEK=1
IF x%<600 AND x%>50
DEFFILL 0
BOUNDARY 0
PBOX x%,200,600,250
DEFFILL 1,2,17
BOUNDARY 1
PBOX 50,200,x%,250
r%=x%-51
r=ROUND(r%/5.48,2)
TEXT 320,180," %"
TEXT 320,180,r
ENDIF
ENDIF
ENDIF
LOOP
'
zufall=r*3
zufall=ABS(zufall)
CLS
SPUT x1$
DEFFILL 0
BOUNDARY 0
PBOX 28,61,612,359
DRAW 27,210
IF huell!=TRUE
fa=586/sweep
IF sweep>=simsw
fak=fa*simsw/bi%
anf=(sweep-simsw)/2*fa+27
FOR i%=27 TO anf
FOR l%=1 TO 4
rausch=RANDOM(zufall)
r%=210+CINT(rausch-zufall/2)
DRAW TO i%,r%
NEXT l%
NEXT i%
FOR l%=0 TO bi%
rausch=RANDOM(zufall)
x%=l%*fak+anf
y%=CINT(210+huelk%(kurve%-1,l%)*hoehe*ver)
r%=y%+CINT(rausch-zufall/2)
IF r%>360
r%=360
ENDIF
IF r%<60
r%=60
ENDIF
DRAW TO x%,r%
NEXT l%
FOR i%=x% TO 612
FOR l%=1 TO 4
rausch=RANDOM(zufall)
r%=210+CINT(rausch-zufall/2)
DRAW TO i%,r%
NEXT l%
NEXT i%
ELSE
anf=sweep/2*ppg+0.5
start%=spekha%-INT(anf)
bis%=spekha%+INT(anf)
fak=586/(bis%-start%)
FOR l%=start% TO bis%
rausch=RANDOM(zufall)
x%=(l%-start%)*fak+27
y%=CINT(210+huelk%(kurve%-1,l%)*hoehe*ver)
r%=y%+CINT(rausch-zufall/2)
IF r%>360
r%=360
ENDIF
IF r%<60
r%=60
ENDIF
DRAW TO x%,r%
NEXT l%
ENDIF
ENDIF
IF bereichsplott!=TRUE
IF le%=0
PRINT AT(30,14);"WAR WOHL NIX !";
GOTO warnix
ENDIF
bereich%=le%-la%
fak=586/bereich%
bereichshalbe%=bereich%/2+la%
IF la%>bi%
GOTO gerade2
ENDIF
IF la%<0 OR la%=0
anfang%=0
start%=CINT(ABS(la%*fak)+27)
ENDIF
IF la%>0
anfang%=la%
start%=27
ENDIF
IF le%<0 OR le%=0
gerade2:
DRAW 27,210
FOR i%=27 TO 612
rausch=RANDOM(zufall)
r%=210+CINT(rausch-zufall/2)
IF r%>360
r%=360
ENDIF
IF r%<60
r%=60
ENDIF
DRAW TO i%,r%
NEXT i%
gerade!=TRUE
GOTO rauschende
ELSE
IF le%>bi%
ende%=bi%
ELSE
ende%=le%
ENDIF
ENDIF
'
DRAW 27,210
FOR i%=27 TO start%
rausch=RANDOM(zufall)
r%=210+CINT(rausch-zufall/2)
IF r%>360
r%=360
ENDIF
IF r%<60
r%=60
ENDIF
DRAW TO i%,r%
NEXT i%
'
FOR l%=anfang% TO ende%
rausch=RANDOM(zufall)
x%=(l%-anfang%)*fak+start%
y%=210+huelk%(kurve%-1,l%)*hoehe*ver
r%=y%+CINT(rausch-zufall/2)
IF r%>360
r%=360
ENDIF
IF r%<60
r%=60
ENDIF
DRAW TO x%,r%
NEXT l%
FOR i%=x% TO 612
rausch=RANDOM(zufall)
r%=210+CINT(rausch-zufall/2)
IF r%>360
r%=360
ENDIF
IF r%<60
r%=60
ENDIF
DRAW TO i%,r%
NEXT i%
ENDIF
rauschende:
HIDEM
SGET x1$
SHOWM
ENDIF
warnix:
BOUNDARY 1
BOUNDARY 1
'
RETURN
'
'
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PROCEDURE laufwerk
LOCAL l$,al%,x%,k%,i%,lx%,maus%,auswahl!
CLS
DEFTEXT 1,0,0,13
l$=BIN$(BIOS(10))
al%=GEMDOS(25)
k%=LEN(l$)
start:
al%=k%-al%
BOX 140,100,500,140
TEXT 160,125,320," Aktuelles Laufwerk :"
BOX 200,300,440,340
TEXT 220,325,200," In Ordnung so ?"
BOX 140,200,500,240
BOX 140,40,500,80
FOR i%=1 TO 8
x%=140+40*i%
LINE x%,200,x%,240
NEXT i%
TEXT 160,225,320,"ABCDEFGHI"
FOR i%=k% TO 8
x%=160+40*i%
DEFFILL 1,2,9
FILL x%,230,1
NEXT i%
x%=120+40*k%
FOR i%=k% TO 1 STEP -1
IF i%<>al%
IF MID$(l$,i%,1)="0"
DEFFILL 1,2,9
ELSE
DEFFILL 1,2,2
ENDIF
x%=160+40*(k%-i%)
FILL x%,230,1
ENDIF
NEXT i%
laufschleife:
maus%=0
DO UNTIL maus%>0
IF INKEY$=CHR$(13)
maus%=2
ENDIF
IF MOUSEK=1
IF MOUSEY>200 AND MOUSEY<240 AND MOUSEX>140 AND MOUSEX<500
auswahl!=-1
lx%=MOUSEX
SUB lx%,140
DIV lx%,40
INC lx%
maus%=1
ENDIF
IF MOUSEY>300 AND MOUSEX>200 AND MOUSEX<440 AND MOUSEY<340
maus%=2
ENDIF
ENDIF
LOOP
IF maus%=1
IF lx%>k%
GOTO laufschleife
ENDIF
DEC lx%
IF MID$(l$,(k%-lx%),1)="0"
GOTO laufschleife
ELSE
al%=lx%
ENDIF
CLS
GOTO start
ENDIF
laufende:
IF auswahl!=-1
CHDRIVE lx%+1
ENDIF
al%=DFREE(0)
TEXT 160,65,320,"NOCH "+STR$(al%)+" BYTE PLATZ AUF DER DISKETTE"
GOSUB datenordner
DO UNTIL (MOUSEK>0) OR (INKEY$>"")
LOOP
CLS
RETURN
'
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PROCEDURE datenordner
CHDIR "\"
IF 0<>FSFIRST("daten",-1)
MKDIR "DATEN"
ENDIF
CHDIR "\DATEN"
RETURN
'
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
'
' *****************************************************************
' MANIPULATIOENEN MIT GEMESSENEN SPEKTREN
' *****************************************************************
'
'
PROCEDURE esp300
LOCAL par!,butt%,parwahl$,bu%,but%,b%,button%,btton%,buttn%,maus%
LOCAL spek!,a$,b$,c$,parwahl$,punkt%,bakl%,d%,abut%,par$,specfile$
LOCAL spec%,spc$,smax%,smin%,pech!,l%,i%,e%,spunkte%,f,al%,res!,abutt%,n,z%
LOCAL bcd%,bcf%,bce%,ab%,ba%,kuck1!,kuck2!,bc%,bb%,gr,messfak,param!,dr%,x%,y%
LOCAL laenge%
DEFTEXT 1,0,0,13
inpeingabe:
ALERT 2," | WAS SOLL GELESEN WERDEN ? ",0,"PARAME| SPEKTR | NIX ",butt%
IF butt%=3
GOTO convende
ENDIF
IF butt%=1
select1:
IF spek!=-1
c$=b$+".PAR"
ELSE
c$=""
ENDIF
FILESELECT "A:\*.par",c$,parwahl$
IF parwahl$>""
IF NOT EXIST(parwahl$)
ALERT 1,parwahl$+":|Diese Datei existiert nicht!",1," ZURÜCK ",button%
GOTO select1
ENDIF
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++
a$=parwahl$
punkt%=RINSTR(a$,".")
bakl%=RINSTR(a$,"\")
d%=punkt%-bakl%-1
a$=MID$(a$,bakl%+1,d%)
IF spek!=-1
IF a$<>b$
ALERT 3," "+a$+" SOLL DER | PARAMETERFILE ZUM | SPEKTRENFILE "+b$+" | SEIN ???",1," NEE | SO ISSES",abut%
IF abut%=1
GOTO select1
ENDIF
ENDIF
ENDIF
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CLR spsw,res%
OPEN "I",#1,parwahl$
z%=0
DO
INPUT #1,par$
IF par$=""
INC z%
ENDIF
EXIT IF z%=2
PRINT par$
IF LEFT$(par$,3)="HSW"
spsw=ROUND(VAL(MID$(par$,4)),2)
ENDIF
IF LEFT$(par$,3)="GSI"
spsw=ROUND(VAL(MID$(par$,4)),2)
ENDIF
IF LEFT$(par$,3)="HCF"
cf=ROUND(VAL(MID$(par$,4)),2)
ENDIF
IF LEFT$(par$,3)="GST"
lirand=ROUND(VAL(MID$(par$,4)),2)
ENDIF
IF LEFT$(par$,3)="RES"
res%=VAL(MID$(par$,4))
ENDIF
LOOP
IF cf=0
CLS
PRINT AT(20,10);" CENTERFILED IST NICHT | DEFFINIERT!! "
PRINT AT(20,15);
INPUT "CENTERFIELD: ";cf
ENDIF
IF spsw=0
IF lirand>0
spsw=ROUND(2*(cf-lirand),2)
ENDIF
ENDIF
par!=TRUE
CLOSE
mess!=0
ELSE
GOTO inpeingabe
ENDIF
IF spek!=0
GOTO inpeingabe
ENDIF
ENDIF
IF butt%=2
IF par!=FALSE
ALERT 3," | | PARAMETER SIND NOCH | NICHT GELESEN !",1," OH JE |NA UND ",buttn%
IF buttn%=1
GOTO inpeingabe
ENDIF
ENDIF
select2:
IF par!=-1
c$=a$+".BIN"
ELSE
c$=""
ENDIF
FILESELECT "A:\*.BIN",c$,specfile$
IF specfile$>""
IF NOT EXIST(specfile$)
ALERT 1,specfile$+":|Diese Datei existiert nicht!",1," ZURÜCK ",btton%
GOTO select2
ENDIF
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
b$=specfile$
punkt%=RINSTR(b$,".")
bakl%=RINSTR(b$,"\")
d%=punkt%-bakl%-1
b$=MID$(b$,bakl%+1,d%)
IF par!=-1
IF a$<>b$
ALERT 3," "+a$+" SOLL DER | PARAMETERFILE ZUM | SPEKTRENFILE "+b$+" | SEIN ???",1," NEE | SO ISSES",abut%
IF abut%=1
GOTO select2
ENDIF
ENDIF
ENDIF
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ERASE spek%()
DIM spec%(9000)
ERASE spektrum%()
ERASE dif%()
OPEN "i",#1,specfile$
l%=0
laenge%=LOF(#1)
DO
EXIT IF laenge%-LOC(#1)<76
INPUT #1,spc$
IF LEFT$(spc$,2)="S1"
FOR i%=9 TO 65 STEP 8
INC l%
IF l%<=9000
spec%(l%)=VAL("&"+MID$(spc$,i%,8))
IF spec%(l%)>smax%
smax%=spec%(l%)
ENDIF
IF spec%(l%)<smin%
smin%=spec%(l%)
ENDIF
ELSE
pech!=-1
ENDIF
NEXT i%
ENDIF
LOOP
spek!=-1
CLOSE
mess!=0
CLS
IF pech!=-1
ALERT 3," DATEI ENTHÄLT MEHR ALS | 9000 STÜTZSTELLEN DAS | KANN NICHT SEIN !",1," ENDE ",e%
CLOSE
GOTO convende
ENDIF
'
spunkte%=l%
' **************** Hier wird gerechnet !
'
DIM spektrum%(spunkte%)
f=ADD(ABS(smin%),smax%)/2
f=1000000/f
FOR i%=1 TO spunkte%
spektrum%(i%)=CINT(spec%(i%)*f)
NEXT i%
ERASE spec%()
'
' ******************************************************************
'
'
ELSE
GOTO inpeingabe
ENDIF
ENDIF
'
' ***************** Hier wird überprüft !
IF par!=0
ALERT 3," PARAMETER SIND IMMER | NOCH NICHT GELESEN! ",1,"JA DOCH | KUCKEN | NA UND ",al%
IF al%=1
GOTO inpeingabe
ENDIF
IF al%=2
param!=-1
GOTO kucken
ENDIF
ENDIF
IF res%>0
res!=-1
ENDIF
n$=STR$(spunkte%)
res$=STR$(res%)
IF res!=-1
IF res%<>spunkte%
IF res%<spunkte% AND res%<0
ALERT 3," DAS IST JA OBER FAUL ! | | MEHR STÜTZSTELLEN ("+n$+") | ALS RESOLUTION ("+res$+")",1," KO |NUN DENN ",abutt%
IF abutt%=1
GOTO convende
ENDIF
ENDIF
ENDIF
ENDIF
n=spunkte%/1024
IF n>8
ALERT 3," DA STIMMT WAS NICHT! | ES SIND "+n$+" | STÜTZSTELLEN VORHANDEN | ALSO ZUVIELE ",1,"SCH...",b%
GOTO convende
ENDIF
IF n==1 OR n==2 OR n==4 OR n==8
ELSE
ALERT 3," DA STIMMT WAS NICHT ! | ES SIND NUR "+n$+" | STÜTZSTELLEN VORHANDEN !",1,"AENDERN| GUTSO | SCH...",bu%
ENDIF
IF bu%=3
GOTO convende
ENDIF
IF bu%=2
ALERT 1," | DAS GIBT JA DOCH NUR | | MIST ! ",1," JA DOCH | DENKSTE ",but%
IF but%=1
GOTO convende
ELSE
ALERT 2," ES WURDEN "+n$+" | STÜTZSTELLEN GELESEN ",1," OK | NEIN ",bcd%
IF bcd%=1
res%=spunkte%
ELSE
IF res%>0
ALERT 1," IN DER PARAMETERLISTE | IST DIE AUFLÖSUNG MIT | "+res$+" ANGEGEBEN !",1," OK | NEIN ",bcf%
IF bcf%=1
GOTO wech
ENDIF
ENDIF
PRINT AT(30,13);
INPUT " AUFLÖSUNG: ",res%
ENDIF
wech:
ENDIF
ENDIF
IF bu%=1
ALERT 2," ES WURDEN "+n$+" | STÜTZSTELLEN GELESEN ",1," OK | NEIN ",bce%
IF bce%=1
res%=spunkte%
ELSE
IF res%>0
ALERT 1," IN DER PARAMETERLISTE | IST DIE AUFLÖSUNG MIT | "+res$+" ANGEGEBEN !",1," OK | NEIN ",bcf%
IF bcf%=1
GOTO wecher
ENDIF
ENDIF
PRINT AT(30,13);
INPUT " AUFLÖSUNG: ",res%
ENDIF
wecher:
ENDIF
'
IF par!=0
ALERT 3," | PARAMETER LESEN! ",1," JA DOCH | NA UND ",ab%
IF ab%=1
GOTO inpeingabe
ENDIF
ENDIF
def:
IF res%=0
ALERT 3," | DIE AUFLÖSUNG IST | NICHT DEFINIERT ! ",1," KUCKEN | SETZEN | NIX DA ",ba%
IF ba%=3
GOTO convende
ENDIF
IF ba%=1
kuck1!=-1
GOTO kucken
ENDIF
IF ba%=2
ALERT 1," ES WURDEN "+n$+" | STÜTZSTELLEN GELESEN ",1," OK | NEIN ",bc%
IF bc%=1
res%=spunkte%
ELSE
PRINT AT(30,13);
INPUT " AUFLÖSUNG: ",res%
ENDIF
kuck1!=0
ENDIF
ENDIF
IF spsw=0
ALERT 3," | DIE SWEEP-WEITE IST | NICHT DEFINIERT ! ",1," KUCKEN | SETZEN | NIX DA ",bb%
IF bb%=3
GOTO convende
ENDIF
IF bb%=1
kuck2!=-1
GOTO kucken
ENDIF
IF bb%=2
PRINT AT(30,13);
INPUT " SWEEP-WEITE: ";spsw
kuck2!=0
ENDIF
ENDIF
'
IF kuck1!=-1 OR kuck2!=-1
kucken:
' *************** Hier wird gezeichnet !
CLS
'
DEFLINE 1,1
gr=150/1000000
messfak=586/spunkte%
DRAW 27,210
FOR i%=1 TO spunkte%
x%=i%*messfak+27
y%=CINT(210-spektrum%(i%)*gr)
DRAW TO x%,y%
NEXT i%
DO UNTIL maus%=1
IF MOUSEK>0
maus%=1
ENDIF
LOOP
IF param!=-1
param!=0
GOTO inpeingabe
ENDIF
IF kuck1!=-1 OR kuck2!=-1
GOTO def
ENDIF
'
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ENDIF
CLS
'
DIM spek%(res%)
IF res%>=spunkte%
daten%=spunkte%
ELSE
daten%=res%
ENDIF
'
l%=1
DO UNTIL l%=daten%+1
spek%(l%)=spektrum%(l%)
spek%(l%)=spektrum%(l%)
INC l%
LOOP
ERASE spektrum%()
mess$=a$
GOSUB messpektrum
mess!=TRUE
messtart%=0
MENU 38,3
MENU 41,3
MENU 42,3
MENU 43,3
' *****************************************************************
convende:
RETURN
'
'
'
'
PROCEDURE messlese
LOCAL button%,wahl$,punkt%,bakl%,d%,l$
DEFTEXT 1,0,0,13
select3:
l$=CHR$(GEMDOS(25)+65)
FILESELECT l$+":\*.SPC","",wahl$
IF wahl$>""
IF NOT EXIST(wahl$)
ALERT 1,wahl$+":|Diese Datei existiert nicht!",1," ZURÜCK ",button%
GOTO select3
ENDIF
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ERASE spek%()
ERASE dif%()
VOID FRE(0)
OPEN "I",#1,wahl$
INPUT #1,spsw,res%,cf
DIM spek%(res%)
BGET #1,VARPTR(spek%(0)),DIM?(spek%())*4
CLOSE
mess!=-1
MENU 38,3
MENU 41,3
MENU 42,3
MENU 43,3
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++
punkt%=RINSTR(wahl$,".")
bakl%=RINSTR(wahl$,"\")
d%=punkt%-bakl%-1
mess$=MID$(wahl$,bakl%+1,d%)
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++
messtart%=0
GOSUB messpektrum
ENDIF
RETURN
'
'
PROCEDURE messchreiben
LOCAL wahl$,button%,l$
IF mess!=-1
select4:
l$=CHR$(GEMDOS(25)+65)
FILESELECT l$+":\*.SPC",mess$+".SPC",wahl$
VOID FRE(0)
IF wahl$>""
IF EXIST(wahl$)
ALERT 1,wahl$+":|Diese Datei existiert schon!",1," ZURÜCK | WEITER ",button%
IF button%=1
GOTO select4
ENDIF
ENDIF
OPEN "O",#1,wahl$
WRITE #1,spsw,res%,cf
BPUT #1,VARPTR(spek%(0)),DIM?(spek%())*4
CLOSE
ENDIF
ENDIF
RETURN
'
'
PROCEDURE messpektrum
MENU OFF
LOCAL i%,l%,x%,y%,gr%,maus%,dr%,y1%,pix%,ver%
ver%=1
DEFTEXT 1,0,0,6
DEFLINE 1,1
zeigen:
gr=150/1000000
messfak=586/res%
DRAW 27,210
FOR i%=1 TO res%
x%=i%*messfak+27
y%=CINT(210-spek%(i%)*gr)
DRAW TO x%,y%
NEXT i%
GET 27,50,613,390,aus$
CLS
BOX 27,60,613,360
LINE 27,210,613,210
LINE 27,360,27,365
LINE 613,360,613,365
manf=ROUND((cf-spsw/2),2)
mend=ROUND((cf+spsw/2),2)
TEXT 10,375,manf
TEXT 580,375,mend
PRINT AT(3,2);" Spektrum: ";mess$;
PRINT AT(40,2);" Auflösung: ";res%;
PRINT AT(3,5);" Gemessene Sweep-Weite: ";spsw;
BOX 300,30,400,45
BOX 500,30,600,45
TEXT 310,40,80,"IN ORDNUNG ?"
TEXT 510,40,80," VERÄNDERN "
HIDEM
SGET x1$
SHOWM
PUT 27,50,aus$,7
maus%=0
DO UNTIL maus%>0
IF MOUSEK=1
IF MOUSEY>30 AND MOUSEY<45
IF MOUSEX>300 AND MOUSEX<400
maus%=1
ENDIF
IF MOUSEX>500 AND MOUSEX<600
maus%=2
ENDIF
ENDIF
ENDIF
LOOP
IF maus%=2
ALERT 2," | WAS DENN NU SCHON WIEDER ? ",2," GRÖßE | DREHEN | HÖHE ",dr%
IF dr%=1
BOX 614,60,631,360
LINE 615,210,630,210
DO UNTIL MOUSEK=2
DO WHILE MOUSEK=1
DEFLINE 1,3
DEFFILL 0,0
IF MOUSEY>59 AND MOUSEY<361
y%=MOUSEY-210
ver%=-y%
u%=210+y%
o%=210-ver%
IF u%<=210
u%=210
ENDIF
IF o%>=210
o%=210
ENDIF
LINE 622,210,622,210+y%
PBOX 615,60,630,o%
PBOX 615,360,630,u%
DEFLINE 1,1
BOX 614,60,631,360
LINE 615,210,630,210
ENDIF
LOOP
LOOP
IF ver%=0
ver%=1
ENDIF
mul=ver%
mul=ABS(mul/10)
IF mul<1
mul=1
ENDIF
IF ver%<0
mul=1/mul
ENDIF
'
l%=1
DO UNTIL l%=res%+1
spek%(l%)=CINT(spek%(l%)*mul)
INC l%
LOOP
CLS
GOTO zeigen
ENDIF
IF dr%=2
l%=1
DO UNTIL l%=res%+1
spek%(l%)=-spek%(l%)
INC l%
LOOP
CLS
GOTO zeigen
ENDIF
'
IF dr%=3
'
y1%=50
DO UNTIL MOUSEK=2
DEFMOUSE bitmuster$
y%=MOUSEY-y1%
IF MOUSEK=1
my%=MOUSEY
DO UNTIL MOUSEK=0
DEFMOUSE 4
y1%=SUB(MOUSEY,y%)
SPUT x1$
PUT 27,y1%,aus$,7
PAUSE 8
LOOP
ENDIF
LOOP
pix%=CINT((50-y1%)/gr)
l%=1
DO UNTIL l%=res%+1
ADD spek%(l%),pix%
INC l%
LOOP
CLS
GOTO zeigen
ENDIF
ENDIF
SPUT x1$
DEFFILL 0
PBOX 28,61,612,359
DEFLINE 1,1
PUT 27,50,aus$,7
HIDEM
SGET x1$
SHOWM
MENU 35,3
MENU 36,3
CLS
IF simm!=-1
MENU 44,3
ENDIF
mstart%=1
mende%=res%
messfak=586/res%
huell!=0
bereichsplott!=0
simess!=0
messplo!=-1
messbereich!=0
MENU 37,3
RETURN
'
PROCEDURE espspektrum
halb!=0
MENU OFF
MENU 38,3
esp:
CLS
LOCAL i%,x%,y%
verg=1
offset%=0
IF 0=(messbereich! OR zentrier!)
mstart%=1
mende%=res%
messfak=586/res%
manf=ROUND((cf-spsw/2),2)
mend=ROUND((cf+spsw/2),2)
ENDIF
GOSUB espzeichnung
DEFTEXT 1,0,0,6
DEFLINE 1,1
gr=150/1000000
BOX 27,60,613,360
LINE 27,360,27,365
LINE 613,360,613,365
TEXT 10,375,ROUND(manf,2)
TEXT 580,375,ROUND(mend,2)
TEXT 300,375,STR$(ROUND(mend-manf,2))+" "+"Gauss"
PRINT AT(3,2);" Spektrum: ";mess$;
PRINT AT(40,2);" Auflösung: ";res%;
PRINT AT(3,5);" Gemessene Sweep-Weite: ";spsw;
ALERT 2," | ALLES IN ORDNUNG ? | ",1," JAJAJA | RESET ",butt%
IF butt%=2
messbereich!=0
zentrier!=0
GOTO esp
ENDIF
HIDEM
SGET x1$
SHOWM
huell!=0
bereichsplott!=0
simess!=0
messplo!=-1
RETURN
'
PROCEDURE espzeichnung
DEFLINE 1,1
gr=150/1000000
DRAW 27,210-offset%
IF mstart%<res%
FOR i%=mstart% TO mende%
IF i%<res%
x%=(i%-mstart%)*messfak+27
IF i%<1
y%=210-offset%
ELSE
y%=CINT(210-offset%-spek%(i%)*gr*verg)
ENDIF
IF x%>=27
IF y%>360
y%=360
ENDIF
IF halb!=-1
IF y%>210
y%=210
ENDIF
ENDIF
IF y%<60
y%=60
ENDIF
DRAW TO x%,y%
ENDIF
IF x%>613
i%=mende%
ENDIF
ENDIF
NEXT i%
ENDIF
IF simess!=-1
HIDEM
IF halb!=0
GET 27,50,613,390,aus$
ELSE
GET 27,50,613,230,aus$
ENDIF
SHOWM
ENDIF
RETURN
'
'
PROCEDURE spekmessbereich
MENU OFF
CLS
LOCAL maus%,key$,x1,x2,messbereich%,li%,re%,lix,rex,auf,g1,g2
LOCAL l%,anf
halb!=0
stpg=res%/spsw
anf=manf
messbereich!=0
messbereichanfang:
IF messbereich!=FALSE
verg=1
offset%=0
g1=0
g2=spsw
mstart%=1
mende%=res%
messfak=586/res%
manf=ROUND((cf-spsw/2),2)
mend=ROUND((cf+spsw/2),2)
DEFLINE 1,1,0,0
BOX 27,60,613,360
LINE 27,360,27,365
LINE 321,360,321,365
LINE 613,360,613,365
DEFTEXT 1,0,0,6
PRINT AT(3,2);" Spektrum: ";mess$;
PRINT AT(40,2);"Auflösung: ";res%;
PRINT AT(3,5);"Gemessene Sweep Width :";spsw;
TEXT 18,375,ROUND(manf,2)
TEXT 580,375,ROUND(mend,2)
TEXT 300,375,STR$(ROUND(mend-manf,2))+" "+"Gauss"
GOSUB espzeichnung
HIDEM
SGET x1$
SHOWM
ENDIF
anf=manf
BOX 580,35,613,55
DEFTEXT 1,1,0,13
TEXT 583,50,25,"ESC"
DEFTEXT 1,1,0,6
maus%=0
DO
key$=INKEY$
IF key$=CHR$(27)
maus%=3
ENDIF
IF key$=CHR$(127)
maus%=2
ENDIF
IF MOUSEK>0
maus%=1
ENDIF
IF MOUSEX>580 AND MOUSEY>35
IF MOUSEX<613 AND MOUSEY<55 AND MOUSEK>0
maus%=3
ENDIF
ENDIF
EXIT IF maus%>0
key$=""
LOOP
IF maus%=3
CLS
GOTO messbereichende
ENDIF
IF maus%=2
CLS
messbereich!=0
GOTO messbereichanfang
ENDIF
HIDEM
SGET x1$
SHOWM
DEFLINE 2,1,1,1
SETMOUSE 321,200,0
messbereich!=-1
micks1:
DO !Abfrage der linken Grenze
SPUT x1$
x1=MOUSEX
li%=MOUSEX-27
IF li%<0
li%=0
ENDIF
IF li%>586
li%=586
ENDIF
lix=ROUND(((g2-g1)/586*li%),2)
PRINT AT(4,7);lix+anf
lix=lix+g1
COLOR 1
LINE x1,60,x1,360
PAUSE 5
IF MOUSEK=1
COLOR 1
LINE x1,60,x1,360
lin=1
HIDEM
SGET x1$
SHOWM
ENDIF
EXIT IF lin=1
LOOP
IF x1<27 OR x1>613
GOTO micks1
ENDIF
micks2:
maus%=0
DO
SPUT x1$
x2=MOUSEX
re%=MOUSEX-27
IF re%<0
re%=0
ENDIF
IF re%>586
re%=586
ENDIF
rex=ROUND(((g2-g1)/586*re%),2)
PRINT AT(14,7);rex+anf
rex=rex+g1
PRINT AT(24,7);ROUND(rex-lix,2);
COLOR 1
LINE x2,60,x2,360
PAUSE 5
COLOR 1
IF MOUSEK=2
LINE x2,60,x2,360
lin=2
ENDIF
EXIT IF lin=2
LOOP
IF x1=x2
GOTO micks2
ENDIF
IF x2<x1 OR x2>614
GOTO micks2
ENDIF
'
'
mstart%=CINT(lix*stpg)
mende%=CINT(rex*stpg)
messbereich%=mende%-mstart%
IF messbereich%=0
GOTO micks1
ENDIF
messfak=586/messbereich%
mend=ROUND(rex+anf,2)
manf=ROUND(lix+anf,2)
g1=lix
g2=rex
'
CLS
DEFLINE 1,1,0,0
BOX 27,60,613,360
LINE 27,360,27,365
LINE 321,360,321,365
LINE 613,360,613,365
DEFTEXT 1,0,0,6
PRINT AT(3,2);" Spektrum: ";mess$;
PRINT AT(40,2);"Auflösung: ";res%;
PRINT AT(3,5);"Gemessene Sweep Width :";spsw;
TEXT 18,375,ROUND(manf,2)
TEXT 580,375,ROUND(mend,2)
TEXT 300,375,STR$(ROUND((mend-manf),2))+" "+"Gauss"
'
GOSUB espzeichnung
HIDEM
SGET x1$
SHOWM
GOTO messbereichanfang
'
messbereichende:
huell!=0
bereichsplott!=0
messbereich!=-1
simess!=0
messplo!=-1
DEFLINE 1,1,0,0
RETURN
'
'
'
'
PROCEDURE simmess
MENU OFF
LOCAL altver,x%,x1%,y%,y1%,maus%,mst%,dummy%,messtart%,gpst,l%
gpst=spsw/res%
'
CLS
halb!=-1
DEFTEXT 1,0,0,13
BOX 80,80,520,110
TEXT 100,100,400,"LINIENFORM DES SIMULIERTEN SPEKTRUMS"
BOX 80,110,520,120
DEFFILL 1,0
PBOX 400,200,500,250
DEFFILL 1,1
PBOX 250,200,350,250
TEXT 260,230,"IN ORDNUNG"
PBOX 100,200,200,250
TEXT 135,230,"HALB"
TEXT 435,230,"VOLL"
DEFLINE defl%,1
LINE 100,115,500,115
maus%=0
DO UNTIL maus%=1
IF INKEY$=CHR$(13)
maus%=1
ENDIF
IF MOUSEK=1
IF MOUSEY>80 AND MOUSEY<120
INC defl%
IF defl%>6
defl%=1
ENDIF
DEFFILL 0,0
PBOX 82,112,518,118
DEFLINE defl%,1
LINE 100,115,500,115
PAUSE 10
ENDIF
IF MOUSEY>200 AND MOUSEY<250
IF MOUSEX>400 AND MOUSEX<500
DEFFILL 0,0
PBOX 101,201,199,249
TEXT 135,230,"HALB"
DEFFILL 1,1
PBOX 401,201,499,249
TEXT 435,230,"VOLL"
halb!=0
ENDIF
IF MOUSEX>100 AND MOUSEX<200
DEFFILL 1,1
PBOX 101,201,199,249
TEXT 135,230,"HALB"
DEFFILL 0,0
PBOX 401,201,499,249
TEXT 435,230,"VOLL"
halb!=-1
ENDIF
IF MOUSEX>250 AND MOUSEX<350
maus%=1
ENDIF
ENDIF
ENDIF
LOOP
CLS
'
simess!=-1
altver=ver
IF halb!=-1
offset%=75
ver=0.5*ver
verg=0.5
ELSE
verg=1
offset%=0
ENDIF
GOSUB espzeichnung
CLS
IF spektrum!=-1
GOSUB bild
ELSE
IF kurve%=0
ALERT 3," KURVENFORM IST NICHT | DEFINIERT !!!!!! ",1," IS GUT ",l%
GOTO simessende
ENDIF
GOSUB pinsel
ENDIF
'
zentrier:
CLS
DEFTEXT 1,0,0,6
DEFLINE 1,1
SPUT x1$
BOX 27,60,613,360
LINE 27,55,27,365
LINE 613,55,613,365
LINE 321,60,321,55
TEXT 20,370,STR$(amb)
TEXT 600,370,STR$(mb)
TEXT 300,370,STR$(ROUND(mb-amb,2))+" GAUSS"
TEXT 10,55,STR$(ROUND(manf,2))
TEXT 580,55,STR$(ROUND(mend,2))
TEXT 300,55,STR$(ROUND(mend-manf,2))+" "+"Gauss"
HIDEM
SGET x1$
SHOWM
PUT 27,50,aus$,7
x1%=27
y1%=50
beginn:
DEFLINE 1,1
DEFTEXT 1,0,0,6
BOX 20,20,120,40
BOX 250,20,350,40
BOX 480,20,580,40
TEXT 30,33,80,"IN ORDNUNG"
TEXT 260,33,80,"VERSCHIEBEN"
TEXT 490,33,80,"ZENTRIEREN"
maus%=0
DO UNTIL maus%>0
IF MOUSEK=1 AND MOUSEY>20 AND MOUSEY<40
IF MOUSEX>20 AND MOUSEX<120
maus%=1
ENDIF
IF MOUSEX>250 AND MOUSEX<350
maus%=2
ENDIF
IF MOUSEX>480 AND MOUSEX<580
maus%=3
ENDIF
ENDIF
LOOP
IF maus%=1
GOTO simessende
ENDIF
IF maus%=2
DEFMOUSE 4
DO UNTIL MOUSEK=2
x%=MOUSEX-x1%
y%=MOUSEY-y1%
IF MOUSEK=1
DO UNTIL MOUSEK=0
x1%=SUB(MOUSEX,x%)
y1%=SUB(MOUSEY,y%)
IF y1%<0
y1%=0
ENDIF
SPUT x1$
PUT x1%,y1%,aus$,7
PAUSE 8
LOOP
ENDIF
LOOP
DEFMOUSE bitmuster$
ENDIF
IF maus%=3
messtart%=x1%-27
SUB mstart%,CINT(messtart%/messfak)
SUB mende%,CINT(messtart%/messfak)
manf=ROUND((mstart%-1)*gpst,2)
ADD manf,(cf-spsw/2)
mend=ROUND((mende%-mstart%)*gpst+manf,2)
CLS
zentrier!=-1
GOSUB espzeichnung
CLS
GOSUB pinsel
GOTO zentrier
ENDIF
GOTO beginn
simessende:
DEFFILL 0,0
PBOX 0,0,581,41
TEXT 340,20,280,"simuliertes Spektrum: "+finame$
TEXT 20,20,280,"gemessenes Spektrum : "+mess$
TEXT 400,35,"Linienzug: "
DEFLINE defl%,1
LINE 500,33,600,33
TEXT 20,35,"Linienzug: "
DEFLINE 1,1,0,0
LINE 120,33,220,33
ver=altver
offset%=0
HIDEM
SGET x1$
SHOWM
messplo!=-1
RETURN
'
'
PROCEDURE sichnum
MENU OFF
DEFLINE 1,1,0,0
DEFTEXT 1,0,0,13
LOCAL mfak,sfak,sichstart%,xpixel%,xa%,l%,x%,y%,z%,aus$,ok!,vgl
LOCAL beschriftung$,l$,r$
verg=1
vgl=ver
xpixel%=(start%-27)*2
gr=150/1000000
hoehe=gr
mfak=messfak*2
sfak=fak*2
IF (bereichsplott! OR huell!) OR simess!
beschriftung$="SIMULIERT: "+finame$
l$=STR$(ROUND(amb,2))
r$=STR$(ROUND(mb,2))
IF messplo!=-1
ok!=-1
ALERT 2," | GRAPHMODE | ? | ",2," 1 | 2 ",but%
IF but%=1
GRAPHMODE 1
ELSE
GRAPHMODE 2
ENDIF
IF halb!=-1
offset%=75
verg=0.5
vgl=ver*0.5
ENDIF
ELSE
ok!=0
verg=1
offset%=0
vgl=ver
defl%=1
ENDIF
ENDIF
FOR z%=1 TO 2 ! ***********************************
DEFLINE 1,1,0,0
CLS
LINE 27,60,613,60
LINE 27,360,613,360
IF z%=1
IF ok!=-1
LINE 27,50,27,380
ELSE
LINE 27,60,27,380
ENDIF
LINE 613,360,613,380
xa%=27
sichstart%=xa%+xpixel%
ELSE
IF ok!=-1
LINE 613,50,613,380
ELSE
LINE 613,60,613,380
ENDIF
LINE 27,360,27,380
xa%=-559
sichstart%=xa%+xpixel%
ENDIF
IF messplo!=-1
beschriftung$="GEMESSEN: "+mess$+".SPC"
l$=STR$(ROUND(manf,2))
r$=STR$(ROUND(mend,2))
messspek:
IF mstart%<res%
IF mstart%>1
st%=spek%(mstart%)
ELSE
st%=0
ENDIF
DRAW xa%,CINT(210-offset%-st%*gr*verg)
FOR i%=mstart% TO mende%
IF i%<res%
x%=(i%-mstart%)*mfak+xa%
IF i%<1
y%=210-offset%
ELSE
y%=CINT(210-offset%-spek%(i%)*gr*verg)
ENDIF
IF y%>360
y%=360
ENDIF
IF halb!=-1
IF y%>210
y%=210
ENDIF
ENDIF
IF y%<60
y%=60
ENDIF
IF x%>0 AND x%<640
DRAW TO x%,y%
ENDIF
ENDIF
NEXT i%
ENDIF
IF ok!=-1
GOTO simspek
ENDIF
ELSE
simspek:
DEFLINE defl%,1,0,0
IF p_line!=-1
LINE 27,210+offset%,613,210+offset%
gerade!=-1
ELSE
gerade!=0
DRAW xa%,210+offset%
DRAW TO sichstart%,210+offset%
FOR l%=anfang% TO ende%
x%=(l%-anfang%)*sfak+sichstart%
y%=210+offset%+huelk%(kurve%-1,l%)*hoehe*vgl
IF y%>360
y%=360
ENDIF
IF y%<60
y%=60
ENDIF
IF halb!=-1
IF y%<210
y%=210
ENDIF
ENDIF
IF x%>0 AND x%<640
DRAW TO x%,y%
ENDIF
NEXT l%
IF x%<613
DRAW TO 613,210+offset%
ENDIF
ENDIF
ENDIF
HIDEM
GET 27,50,613,390,aus$
SHOWM
CLS
PUT 27,30,aus$
IF ok!=-1
IF z%=1
DEFLINE 1,1,0,0
LINE 400,18,600,18
BOX 400,10,600,25
TEXT 10,25,STR$(manf)
TEXT 150,25,200,"GEMESSEN: "+mess$+".SPC"
TEXT 25,370,STR$(ROUND(amb,2))
ELSE
DEFLINE defl%,1,0,0
LINE 300,18,500,18
DEFLINE 1,1,0,0
BOX 300,10,500,25
TEXT 50,25,200,"SIMULIERT :"+finame$
TEXT 570,25,STR$(mend)
TEXT 600,370,STR$(ROUND(mb,2))
ENDIF
ELSE
IF z%=1
TEXT 150,25,200,beschriftung$
TEXT 25,370,l$
ELSE
TEXT 50,25,200,beschriftung$
TEXT 625-(LEN(r$)*8),370,r$
ENDIF
ENDIF
HIDEM
SGET x1$
SHOWM
GOSUB pixel
NEXT z% !***********************************************************
DEFLINE 1,1,0,0
offset%=0
GRAPHMODE 1
RETURN